最复杂 java 成绩排名
时间: 2023-10-17 17:04:03 浏览: 46
以下是一个复杂的 Java 成绩排名示例:
```java
import java.util.*;
class Student {
private String name;
private int id;
private Map<String, Double> scores;
public Student(String name, int id, Map<String, Double> scores) {
this.name = name;
this.id = id;
this.scores = scores;
}
public String getName() {
return name;
}
public int getId() {
return id;
}
public Map<String, Double> getScores() {
return scores;
}
public double getScore(String subject) {
return scores.getOrDefault(subject, 0.0);
}
public double getAverageScore() {
double sum = 0.0;
for (double score : scores.values()) {
sum += score;
}
return sum / scores.size();
}
@Override
public String toString() {
return String.format("%s (ID: %d)", name, id);
}
}
public class GradeRanking {
private List<Student> students;
public GradeRanking(List<Student> students) {
this.students = students;
}
public List<Student> getRanking(String subject) {
List<Student> ranking = new ArrayList<>(students);
ranking.sort((s1, s2) -> Double.compare(s2.getScore(subject), s1.getScore(subject)));
return ranking;
}
public List<Student> getTopN(int n, String subject) {
List<Student> ranking = getRanking(subject);
return ranking.subList(0, Math.min(n, ranking.size()));
}
public List<Student> getFailingStudents(String subject) {
List<Student> failingStudents = new ArrayList<>();
for (Student student : students) {
if (student.getScore(subject) < 60.0) {
failingStudents.add(student);
}
}
return failingStudents;
}
public List<Student> getBestStudents() {
List<Student> bestStudents = new ArrayList<>(students);
bestStudents.sort((s1, s2) -> Double.compare(s2.getAverageScore(), s1.getAverageScore()));
return bestStudents;
}
public static void main(String[] args) {
Map<String, Double> scores1 = new HashMap<>();
scores1.put("Math", 90.0);
scores1.put("English", 80.0);
scores1.put("Science", 70.0);
Student student1 = new Student("Alice", 1, scores1);
Map<String, Double> scores2 = new HashMap<>();
scores2.put("Math", 80.0);
scores2.put("English", 70.0);
scores2.put("Science", 60.0);
Student student2 = new Student("Bob", 2, scores2);
Map<String, Double> scores3 = new HashMap<>();
scores3.put("Math", 70.0);
scores3.put("English", 60.0);
scores3.put("Science", 50.0);
Student student3 = new Student("Charlie", 3, scores3);
List<Student> students = Arrays.asList(student1, student2, student3);
GradeRanking ranking = new GradeRanking(students);
System.out.println("Ranking by Math scores:");
for (Student student : ranking.getRanking("Math")) {
System.out.printf("%s: %.1f\n", student, student.getScore("Math"));
}
System.out.println("Top 2 students in English:");
for (Student student : ranking.getTopN(2, "English")) {
System.out.printf("%s: %.1f\n", student, student.getScore("English"));
}
System.out.println("Failing students in Science:");
for (Student student : ranking.getFailingStudents("Science")) {
System.out.printf("%s: %.1f\n", student, student.getScore("Science"));
}
System.out.println("Best students:");
for (Student student : ranking.getBestStudents()) {
System.out.printf("%s: %.1f\n", student, student.getAverageScore());
}
}
}
```
输出:
```
Ranking by Math scores:
Alice (ID: 1): 90.0
Bob (ID: 2): 80.0
Charlie (ID: 3): 70.0
Top 2 students in English:
Alice (ID: 1): 80.0
Bob (ID: 2): 70.0
Failing students in Science:
Charlie (ID: 3): 50.0
Best students:
Alice (ID: 1): 80.0
Bob (ID: 2): 70.0
Charlie (ID: 3): 60.0
```