写一个程序,学生信息包括姓名、学号、各科总成绩。 把录入的学生用一个ArrayList来存放,并能够实现按照学生的学号或总成绩进行排序输出结果。 (需要比较器)Comparetor
时间: 2024-09-20 17:04:25 浏览: 45
java课程设计学生成绩管理系统(学生信息增删改查各科总分排序IO文本存储读写等等)
5星 · 资源好评率100%
在Java中,我们可以创建一个名为`Student`的类,包含姓名(name)、学号(studentId)和各科总成绩(totalScore)。为了实现在ArrayList中存储学生信息并按学号和总成绩排序,我们需要实现`Comparable`接口或创建一个自定义的`Comparator`。这里我们使用`Comparator`,因为它提供更多的灵活性和功能。
首先,定义`Student`类:
```java
public class Student implements Comparable<Student> {
private String name;
private int studentId;
private double totalScore;
// 构造函数、getter和setter
@Override
public int compareTo(Student other) {
if (this.studentId == other.studentId) {
return Double.compare(this.totalScore, other.totalScore);
} else {
return Integer.compare(this.studentId, other.studentId);
}
}
// 重写toString方法以便于打印
}
```
接下来,创建一个`SortStudents`类,其中包含一个`ArrayList<Student>`:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class SortStudents {
private ArrayList<Student> students;
public SortStudents() {
this.students = new ArrayList<>();
}
// 添加学生的方法
public void addStudent(String name, int studentId, double totalScore) {
students.add(new Student(name, studentId, totalScore));
}
// 按照学号排序
public void sortByStudentId() {
Collections.sort(students, Comparator.comparingInt(Student::getStudentId));
}
// 按照总成绩排序
public void sortByTotalScore() {
Collections.sort(students, Comparator.comparingDouble(Student:: getTotalScore).reversed());
}
// 打印排序后的学生列表
public void printStudents(String sortOrder) {
switch (sortOrder) {
case "id":
sortByStudentId();
break;
case "score":
sortByTotalScore();
break;
default:
System.out.println("Invalid sort order");
return;
}
for (Student student : students) {
System.out.println(student);
}
}
}
```
现在你可以实例化`SortStudents`对象,添加学生,然后选择按学号或总成绩排序并打印:
```java
public static void main(String[] args) {
SortStudents sort = new SortStudents();
sort.addStudent("张三", 1001, 85.0);
sort.addStudent("李四", 1002, 92.0);
// 更多学生...
sort.printStudents("id"); // 按学号排序
sort.printStudents("score"); // 按总成绩降序排序
}
```
阅读全文