题目要求:
读入n>0名学生的姓名 , 学号 , 成绩 ,分别输出成绩最高和成绩最低学生的姓名和学号.
解题思路:
- 写一个实体类,重写toString方法;
- 使用TreeSet集合实现Comparator接口,重写compare方法使其可以进行排序;
- 打印第一个值(调用TreeSet的 first() 方法)和最后一个值(调用TreeSet的 last() 方法);
import java.util.*;
/**
实体:
构造器 + get + set + toString
满分通过
*/
class StudentsDemo {
private String studentsName;
private String studentsNumber;
private int grade;
public StudentsDemo() {
}
public StudentsDemo(String studentsName, String studentsNumber, int grade) {
this.studentsName = studentsName;
this.studentsNumber = studentsNumber;
this.grade = grade;
}
public String getStudentsName() {
return studentsName;
}
public void setStudentsName(String studentsName) {
this.studentsName = studentsName;
}
public String getStudentsNumber() {
return studentsNumber;
}
public void setStudentsNumber(String studentsNumber) {
this.studentsNumber = studentsNumber;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
/**
重写toString方法
*/
@Override
public String toString() {
return studentsName + ' ' + studentsNumber;
}
}
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String num = scanner.nextLine();
Integer integer = Integer.valueOf(num);//输入需要比较的个数
TreeSet<StudentsDemo> studentsDemos = new TreeSet<>(new Comparator<StudentsDemo>() {
@Override
public int compare(StudentsDemo o1, StudentsDemo o2) {
//按成绩降序
int result = o2.getGrade() - o1.getGrade();
//当成绩相同时按照名字进行排序
if (result==0) return o1.getStudentsName().charAt(0) - o2.getStudentsName().charAt(0);
else return result;
}
});
for (int i = 0; i < integer; i++) {
String student = scanner.nextLine(); //输入测试样例
String[] splitStudent = student.split(" "); //对样例分割
String s0 = splitStudent[0]; //学生姓名
String s1 = splitStudent[1]; //学生学号
int s2 = Integer.valueOf(splitStudent[2]); //学生成绩
if (s0.length()>10||s1.length()>10||s2>100||s2<0)break; //要求姓名,学号长度不超过10 , 成绩不能小于0,大于100
StudentsDemo studentsDemo = new StudentsDemo(s0,s1,s2); //将合格的值放入类中
studentsDemos.add(studentsDemo); //放入集合中
}
scanner.close();
System.out.println(studentsDemos.first());//输出treeSet集合的第一个值,first方法
System.out.println(studentsDemos.last());//输出treeSet集合的最后一个值,last方法
}
}