/*
- 对象数组题目
- 1,创建学生类:包含三个属性,学号number,int型,年级 state int型,成绩score int型
- 创建60个对象,学号为1到60,年级和成绩由随机数确定
- 2,打印3年级所有学生的信息
- 3,使用冒泡排序给学生成绩排序,并遍历所有学生信息
- 随机数生成:Math.random(),返回值类型double
- 随机数组范围[0,1),映射到[a,b]则表达式为 (Math.random * (a - b + 1) + a)
- 四舍五入取整:Math.round(double args),返回值类型long
*/
package com.atguigu.contact;
import java.util.*;
public class Object3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Student[] s = new Student[60];//创建Student类型的数组
for(int i = 0; i < s.length; i++) {
System.out.println(s[i]);//输出60个null,地址值
}
//学生对象数组赋值
for(int i = 0; i < s.length; i++) {
s[i] = new Student();//初始化对象数组元素,属性值为初始值
s[i].number = i + 1;
s[i].state = (int)(Math.random() * 6 + 1);
s[i].score = (int)(Math.round((Math.random() * 100)));
}
//遍历学生信息
for(int i = 0; i < s.length; i++) {
System.out.print(s[i].number + "号学员的年级是:" + s[i].state + " 成绩为:" + s[i].score);
System.out.println();
}
System.out.println("-------------------------------");
//输出state为3 的学生信息
for (int i = 0; i < s.length; i++) {
if(s[i].state == 3) {
System.out.print(s[i].number + "号学员的年级是:" + s[i].state + " 成绩为:" + s[i].score);
System.out.println();
}
}
System.out.println("-------------------------------");
//冒泡排序
for (int i = 0; i < s.length - 1; i++) {
for (int j = 0; j < s.length - 1 - i; j++) {
if(s[j].score > s[j + 1].score) {
Student temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;//这里比较交换对象数组的元素,而不是元素的score属性
}
}
}
//输出排序后结果
for(int i = 0; i < s.length; i++) {
s[i].printInfo();
}
//测试方法
Object3 stus = new Object3();
Student[] s1 = new Student[40];
stus.setArguments(s1);
stus.print(s1);
System.out.println("-------------------------------");
stus.sort(s1);
stus.showState(s1, 4);
System.out.println("-------------------------------");
stus.print(s1);
}
//优化方式,将功能封装到方法内
/**
*
* Description
* @author wisdomcodeinside
* @version 1.0.0.1
* @E-mail [email protected]
* @2020-01-15上午8:19:03
* @param stu
*/
//1,遍历输出功能
public void print(Student[] stu) {
for (int i = 0; i < stu.length; i++) {
stu[i].printInfo();
}
}
//排序功能
public void sort(Student[] s) {
for (int i = 0; i < s.length - 1; i++) {
for (int j = 0; j < s.length - 1 - i; j++) {
if(s[j].score > s[j + 1].score) {
Student temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;//这里比较交换对象数组的元素,而不是元素的score属性
}
}
}
}
//输出特定年级对象功能
public void showState(Student[] s,int j) {
for (int i = 0; i < s.length; i++) {
if(s[i].state == j) {
System.out.print(s[i].number + "号学员的年级是:" + s[i].state + " 成绩为:" + s[i].score);
System.out.println();
}
}
}
//对象数组赋值功能
public void setArguments(Student[] s) {
for(int i = 0; i < s.length; i++) {
s[i] = new Student();//初始化对象数组元素,属性值为初始值
s[i].number = i + 1;
s[i].state = (int)(Math.random() * 6 + 1);
s[i].score = (int)(Math.round((Math.random() * 100)));
}
}
}
//创建Student类待使用
class Student{
int number;
int state;
int score;
public void printInfo() {
System.out.print(number + "号学员的年级是:" + state + " 成绩为:" + score);
System.out.println();
}
}