要按學生的總分進行排名,並根據學號列印每位學生的成績及其排名,我們可以在Classroom類中添加一個新的方法來實現這個功能。這個方法首先計算每位學生的總分,然後根據總分對學生進行排序,最後按照學號的順序列印出每位學生的成績和名次。
這裏的實現將使用Java的集合框架,特別是List和Collections工具類來進行排序和查找。我們還需要一個輔助類或者使用Map來關聯每位學生的學號、成績及其排名。
實現代碼
首先,我們擴展Student類,添加一個方法來返回表示成績的字串:
java
public class Student {
// 省略其他屬性和方法...
// 返回表示成績的字串
public String getScoreString() {
return String.format("學號: %s, 名字: %s, 國文成績: %d, 數學成績: %d, 總分: %d",
id, name, chineseScore, mathScore, getTotalScore());
}
}
然後,在Classroom類中添加一個方法來列印學生的成績和排名:
java
Copy code
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;
public class Classroom {
private Map<String, Student> students;
// 省略其他方法...
// 按總分排名並列印成績及名次
public void printScoresAndRanks() {
// 將學生放入列表中以便排序
List<Student> sortedStudents = new ArrayList<>(students.values());
// 按總分降序排序
Collections.sort(sortedStudents, Comparator.comparingInt(Student::getTotalScore).reversed());
// 為每個學生分配排名
int rank = 1;
for (Student student : sortedStudents) {
System.out.println(student.getScoreString() + ", 名次: " + rank);
rank++;
}
}
}
這個方法首先把students映射中的所有學生放入一個列表中,然後使用Collections.sort方法和一個自定義的比較器(Comparator)按總分進行降序排序。排序完成後,方法遍曆排序後的學生列表,為每位學生列印成績和排名。
使用
你可以通過向Classroom實例添加學生並調用printScoresAndRanks方法來測試這個功能:
java
Copy code
public static void main(String[] args) {
Classroom classroom = new Classroom();
// 添加學生示例
classroom.addStudent(new Student("001", "Alice", 90, 92));
classroom.addStudent(new Student("002", "Bob", 85, 88));
// 添加更多學生...
classroom.printScoresAndRanks(); // 列印學生的成績和排名
}
這種方法可以有效地根據學生的總分進行排名,並按照排名順序列印出每位學生的詳細成績資訊和排名,滿足題目的要求。