需求:
键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出。
分析:
① 创建学生类(姓名,语文成绩,数学成绩,英语成绩,总分)
② 创建TreeSet集合,用来存储学生对象
③ 录入学生信息
④ 创建学生对象的比较器
⑤ 把学生对象添加到TreeSet集合中
⑥ 遍历集合
/**
*学生信息类
*/
public class Student2{
private String name;
private int chinese;
private int maths;
private int english;
private int sum;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", chinese=" + chinese +
", maths=" + maths +
", english=" + english +
", sum=" + sum +
'}';
}
public Student2() {
}
public Student2(String name, int chinese, int maths, int english, int sum) {
this.name = name;
this.chinese = chinese;
this.maths = maths;
this.english = english;
this.sum = sum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getChinese() {
return chinese;
}
public void setChinese(int chinese) {
this.chinese = chinese;
}
public int getMaths() {
return maths;
}
public void setMaths(int maths) {
this.maths = maths;
}
public int getEnglish() {
return english;
}
public void setEnglish(int english) {
this.english = english;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
}
/**
*测试类
*/
public class StudentTest2 {
public static void main(String[] args) {
//创建一个TreeSet集合
Set<Student2> set=new TreeSet<Student2>(new Comparator<Student2>() {
@Override
public int compare(Student2 o1, Student2 o2) {
//总分从高到低排序
int num=o2.getSum()-o1.getSum();
//保证可以出现总分相同但是语文成绩不同的学生
int num2=num==0 ? o1.getChinese()-o2.getChinese():num;
//保证可以出现总分相同但是数学成绩不同的学生
int num3=num2==0 ? o1.getMaths()-o2.getMaths():num2;
//保证可以出现总分相同但是英语成绩不同的学生
int num4=num3==0 ? o1.getEnglish()-o2.getEnglish():num3;
//保证可以出现总分相同但是姓名不同的学生
int num5=num4==0 ? o1.getName().compareTo(o2.getName()):num4;
return num5;
}
});
System.out.println("学生信息开始录入......");
//键盘输入3个学生信息
for (int i=0;i<3;i++){
Scanner sc=new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name=sc.next();
System.out.println("请输入语文成绩:");
int chinese=sc.nextInt();
System.out.println("请输入数学成绩:");
int maths=sc.nextInt();
System.out.println("请输入英语成绩:");
int english=sc.nextInt();
int sum=chinese+maths+english;
set.add(new Student2(name,chinese,maths,english,sum));
}
System.out.println("学生信息录入完毕");
System.out.println("学习信息从高到低排序如下:");
System.out.println("姓名\t总分成绩");
for(Student2 s:set){
System.out.println(s.getName() + "\t" + s.getSum());
}
}
}
执行结果:
学生信息开始录入......
请输入学生姓名:
张三
请输入语文成绩:
62
请输入数学成绩:
64
请输入英语成绩:
63
请输入学生姓名:
李四
请输入语文成绩:
45
请输入数学成绩:
46
请输入英语成绩:
48
请输入学生姓名:
王五
请输入语文成绩:
77
请输入数学成绩:
74
请输入英语成绩:
56
学生信息录入完毕
学习信息从高到低排序如下:
姓名 总分成绩
王五 207
张三 189
李四 139