/*
- 對象數組題目
- 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();
}
}