不知道输入是要如何输入的,如果是键盘输入那工作量就大了,题目要求使用类的构造方法,那我就直接用构造方法初始化,省得你再一个个从键盘输入。
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays;
import java.util.Comparator;
public class TestStudent {
public static void main(String[] args) {
ClassStudent[] students = new ClassStudent[10];
students[0] = new ClassStudent("301", "Leon", 80.3, 85);
students[1] = new ClassStudent("302", "Ana", 77.5, 89);
students[2] = new ClassStudent("303", "Shark", 60, 65);
students[3] = new ClassStudent("401", "Reek", 50, 60);
students[4] = new ClassStudent("402", "Antoni", 90.2, 93);
students[5] = new ClassStudent("403", "Jezus", 100, 80);
students[6] = new ClassStudent("301", "Aux", 81, 75);
students[7] = new ClassStudent("302", "Biu", 77.8, 80);
students[8] = new ClassStudent("303", "Bomb", 79.1, 90);
students[9] = new ClassStudent("401", "Bob", 90, 88);
Arrays.sort(students, new Comparator<ClassStudent>() {
@Override
public int compare(ClassStudent s1, ClassStudent s2) {
int result;
if(null == s1 && null == s2) {
result = 0;
} else if(null == s1) {
result = 1;
} else if(null == s2) {
result = -1;
}
result = (int) Math.ceil(s1.getTotalScore() - s2.getTotalScore());
result = -result; // 如果要降序就加上这一句,升序的话就去掉这一句
return result;
}
@Override
public Comparator<ClassStudent> reversed() {
return null;
}
});
System.out.println("班级\t姓名\t平时成绩\t考试成绩\t总成绩\t等级");
for(ClassStudent student : students) {
System.out.println(student);
}
}
}
class ClassStudent {
private String klass;
private String name;
private double usualScore;
private double examScore;
private double totalScore;
private char rank;
public ClassStudent(String klass, String name, double usualScore,
double examScore) {
this.klass = klass;
this.name = name;
this.usualScore = usualScore;
this.examScore = examScore;
this.totalScore = usualScore * 0.3 + examScore * 0.7;
if(totalScore >= 80) {
rank = 'A';
} else if (totalScore >= 60) {
rank = 'B';
} else {
rank = 'C';
}
}
public double getTotalScore() {
return totalScore;
}
@Override
public String toString() {
return String.format("%s\t%s\t%.1f\t%.1f\t%5s\t%c",
klass, name, usualScore, examScore,
new BigDecimal(totalScore).setScale(1, RoundingMode.HALF_UP), rank);
}
}