4-1面向对象编程(上)----练习4--对象数组

本文展示了如何在Java中创建一个Student类,包含学号、年级和成绩属性。通过随机数生成器填充20个学生对象的年级和成绩,然后遍历并打印所有学生信息。接着,实现查找特定年级(例如3年级)的学生以及使用冒泡排序按成绩对学生进行排序的功能。最后,再次遍历排序后的学生数组,展示排序效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YY鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值