用Java实现定义包含学号、姓名和成绩信息的学生类Student。在测试类中定义存放n个学生对象存放到某个集合对象中(具体集合自行确定),然后按成绩进行降序排列,并将排序结果(类Student对象)保存到文件stud.dat中,再读出文件stud.dat中所有的学生信息并显示。并给出运行结果。
时间: 2024-02-28 13:56:21 浏览: 78
可以使用以下代码实现:
```java
import java.io.*;
import java.util.*;
class Student implements Serializable, Comparable<Student> {
private int id;
private String name;
private double score;
public Student(int id, String name, double score) {
this.id = id;
this.name = name;
this.score = score;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public double getScore() {
return score;
}
@Override
public int compareTo(Student o) {
return Double.compare(o.score, this.score);
}
@Override
public String toString() {
return "学号:" + id + ",姓名:" + name + ",成绩:" + score;
}
}
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student(1, "张三", 90.5));
students.add(new Student(2, "李四", 85.0));
students.add(new Student(3, "王五", 92.0));
students.add(new Student(4, "赵六", 80.5));
Collections.sort(students);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("stud.dat"))) {
for (Student student : students) {
oos.writeObject(student);
}
} catch (IOException e) {
e.printStackTrace();
}
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stud.dat"))) {
Student student;
while ((student = (Student)ois.readObject()) != null) {
System.out.println(student);
}
} catch (EOFException e) {
// 文件读取完毕
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
```
在上面的代码中,我们定义了一个Student类,用于表示学生信息,并实现了比较接口Comparable,以便可以将学生信息按成绩进行降序排序。在main()方法中,我们创建了一个List集合对象,将n个学生对象存放到其中,然后调用Collections.sort()方法对集合中的学生对象进行排序。接着,我们使用ObjectOutputStream将排序后的学生信息保存到文件stud.dat中。最后,我们使用ObjectInputStream从文件stud.dat中读取所有学生信息,并在控制台上输出。
运行结果如下:
```
学号:3,姓名:王五,成绩:92.0
学号:1,姓名:张三,成绩:90.5
学号:2,姓名:李四,成绩:85.0
学号:4,姓名:赵六,成绩:80.5
```
阅读全文