4.对象数组题目:
定义类Student,包含三个属性:学号number(int),年纪state(int),成绩score(int),创建20个学生对象,学号1到20,年级和成绩都由随机数确定。
问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡序列按学生成绩排序,并遍历所有学生信息。
提示:
(1)生成随机数:Math.random(),返回值类型double。
(2)四舍五入取整:Math.round(double d),返回值类型long。
代码
public class StudentTest {
public static void main(String[] args) {
// 声明Student类型的数组
Student[] stus = new Student[20];// 数组的元素可以是任何的数据类型
for (int i = 0; i < stus.length; i++) {
// 给数组元素赋值
stus[i] = new Student();
// 给Student对象的属性赋值
stus[i].number = i + 1;
// 年及:【1,6】
stus[i].state = (int) (Math.random() * (6 - 1 + 1) + 1);
// 成绩:【0,100】
stus[i].score = (int) (Math.random() * (100 - 0 + 1));
}
// 遍历学生数组
for (int i = 0; i < stus.length; i++) {
// System.out.println(stus[i]);//打印地址值
// 方式一:在测试中写
// System.out.print("学号:"+stus[i].number+ " , ");
// System.out.print("年级:"+stus[i].state+ " , ");
// System.out.println("成绩:"+stus[i].score);
// 方式二:在方法中写
System.out.println(stus[i].info());
}
System.out.println("****************************************");
// 问题一:打印出3年级的学生信息
for (int i = 0; i < stus.length; i++) {
if (stus[i].state == 3) {
System.out.println(stus[i].info());
}
}
System.out.println("*****************************************");
// 问题二:使用冒泡排序学生成绩,并遍历所有学生信息
for (int i = 0; i < stus.length - 1; i++) {
for (int j = 0; j < stus.length - 1 - i; j++) {
if(stus[j].score > stus[j+1].score) {
//如果需要幻虚,交换的是数组的元素:Student对象!!!
Student temp = stus[j];
stus[j] = stus[j+1];
stus[j+1] = temp;
}
}
}
//遍历
for (int i = 0; i < stus.length; i++) {
System.out.println(stus[i].info());
}
}
}
class Student {
int number;// 学号
int state;// 年级
int score;// 成绩
// 显示学生信息的方法
public String info() {
return "学号:" + number + " , 年级:" + state + " , 成绩:" + score;
}
}
输出:
学号:1 , 年级:5 , 成绩:29
学号:2 , 年级:5 , 成绩:77
学号:3 , 年级:3 , 成绩:35
学号:4 , 年级:1 , 成绩:72
学号:5 , 年级:6 , 成绩:49
学号:6 , 年级:3 , 成绩:28
学号:7 , 年级:5 , 成绩:95
学号:8 , 年级:2 , 成绩:45
学号:9 , 年级:2 , 成绩:50
学号:10 , 年级:1 , 成绩:0
学号:11 , 年级:2 , 成绩:19
学号:12 , 年级:3 , 成绩:60
学号:13 , 年级:4 , 成绩:71
学号:14 , 年级:3 , 成绩:67
学号:15 , 年级:3 , 成绩:13
学号:16 , 年级:4 , 成绩:78
学号:17 , 年级:6 , 成绩:48
学号:18 , 年级:2 , 成绩:95
学号:19 , 年级:6 , 成绩:52
学号:20 , 年级:5 , 成绩:97
****************************************
学号:3 , 年级:3 , 成绩:35
学号:6 , 年级:3 , 成绩:28
学号:12 , 年级:3 , 成绩:60
学号:14 , 年级:3 , 成绩:67
学号:15 , 年级:3 , 成绩:13
*****************************************
学号:10 , 年级:1 , 成绩:0
学号:15 , 年级:3 , 成绩:13
学号:11 , 年级:2 , 成绩:19
学号:6 , 年级:3 , 成绩:28
学号:1 , 年级:5 , 成绩:29
学号:3 , 年级:3 , 成绩:35
学号:8 , 年级:2 , 成绩:45
学号:17 , 年级:6 , 成绩:48
学号:5 , 年级:6 , 成绩:49
学号:9 , 年级:2 , 成绩:50
学号:19 , 年级:6 , 成绩:52
学号:12 , 年级:3 , 成绩:60
学号:14 , 年级:3 , 成绩:67
学号:13 , 年级:4 , 成绩:71
学号:4 , 年级:1 , 成绩:72
学号:2 , 年级:5 , 成绩:77
学号:16 , 年级:4 , 成绩:78
学号:7 , 年级:5 , 成绩:95
学号:18 , 年级:2 , 成绩:95
学号:20 , 年级:5 , 成绩:97
优化代码:
public class StudentTest1 {
public static void main(String[] args) {
// 声明Student类型的数组
Student1[] stus = new Student1[20];
for (int i = 0; i < stus.length; i++) {
// 给数组元素赋值
stus[i] = new Student1();
// 给Student对象的属性赋值
stus[i].number = i + 1;
// 年及:【1,6】
stus[i].state = (int) (Math.random() * (6 - 1 + 1) + 1);
// 成绩:【0,100】
stus[i].score = (int) (Math.random() * (100 - 0 + 1));
}
StudentTest1 test = new StudentTest1();
// 遍历学生数组
test.print(stus);
System.out.println("****************************************");
// 问题一:打印出3年级的学生信息
test.searchState(stus, 5);
System.out.println("*****************************************");
// 问题二:使用冒泡排序学生成绩,并遍历所有学生信息
test.sort(stus);
// 遍历
test.print(stus);
}
/**
* 遍历Student1【】数组的操作
* @param stus
*/
public void print(Student1[] stus) {
for (int i = 0; i < stus.length; i++) {
System.out.println(stus[i].info());
}
}
/**
* 查找Student数组中指定年级的学生信息
* @param stus要查找的数组
* @param state要查找的年级
*/
public void searchState(Student1[] stus,int state) {
for (int i = 0; i < stus.length; i++) {
if (stus[i].state == state) {
System.out.println(stus[i].info());
}
}
}
/**
* 给Student1数组按成绩排序
* @param stus
*/
public void sort(Student1[] stus) {
for (int i = 0; i < stus.length - 1; i++) {
for (int j = 0; j < stus.length - 1 - i; j++) {
if (stus[j].score > stus[j + 1].score) {
// 如果需要幻虚,交换的是数组的元素:Student对象!!!
Student1 temp = stus[j];
stus[j] = stus[j + 1];
stus[j + 1] = temp;
}
}
}
}
}
class Student1 {
int number;// 学号
int state;// 年级
int score;// 成绩
// 显示学生信息的方法
public String info() {
return "学号:" + number + " , 年级:" + state + " , 成绩:" + score;
}
}
输出:
学号:1 , 年级:5 , 成绩:90
学号:2 , 年级:5 , 成绩:12
学号:3 , 年级:3 , 成绩:35
学号:4 , 年级:4 , 成绩:14
学号:5 , 年级:2 , 成绩:6
学号:6 , 年级:2 , 成绩:0
学号:7 , 年级:5 , 成绩:30
学号:8 , 年级:6 , 成绩:99
学号:9 , 年级:2 , 成绩:6
学号:10 , 年级:4 , 成绩:84
学号:11 , 年级:2 , 成绩:36
学号:12 , 年级:3 , 成绩:52
学号:13 , 年级:6 , 成绩:59
学号:14 , 年级:2 , 成绩:85
学号:15 , 年级:1 , 成绩:23
学号:16 , 年级:3 , 成绩:98
学号:17 , 年级:4 , 成绩:69
学号:18 , 年级:1 , 成绩:81
学号:19 , 年级:3 , 成绩:45
学号:20 , 年级:6 , 成绩:87
****************************************
学号:1 , 年级:5 , 成绩:90
学号:2 , 年级:5 , 成绩:12
学号:7 , 年级:5 , 成绩:30
*****************************************
学号:6 , 年级:2 , 成绩:0
学号:5 , 年级:2 , 成绩:6
学号:9 , 年级:2 , 成绩:6
学号:2 , 年级:5 , 成绩:12
学号:4 , 年级:4 , 成绩:14
学号:15 , 年级:1 , 成绩:23
学号:7 , 年级:5 , 成绩:30
学号:3 , 年级:3 , 成绩:35
学号:11 , 年级:2 , 成绩:36
学号:19 , 年级:3 , 成绩:45
学号:12 , 年级:3 , 成绩:52
学号:13 , 年级:6 , 成绩:59
学号:17 , 年级:4 , 成绩:69
学号:18 , 年级:1 , 成绩:81
学号:10 , 年级:4 , 成绩:84
学号:14 , 年级:2 , 成绩:85
学号:20 , 年级:6 , 成绩:87
学号:1 , 年级:5 , 成绩:90
学号:16 , 年级:3 , 成绩:98
学号:8 , 年级:6 , 成绩:99