用java定义包含学号、姓名和成绩信息的学生类Student。在测试类中定义存放n个学生对象存放到某个集合对象中(具体集合自行确定),然后按成绩进行降序排列,并将排序结果(类Student对象)保存到文件stud.dat中,再读出文件stud.dat中所有的学生信息并显示。 说明:注意成绩排序,可以采用自然排序或客户排序,也可以采用集合类的sort()方法进行。使用Serializable
时间: 2024-03-02 15:54:03 浏览: 61
好的,我明白了你的问题。以下是代码示例:
Student类定义:
```java
import java.io.Serializable;
public 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;
}
}
```
测试类代码:
```java
import java.io.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student(1, "张三", 78.5));
students.add(new Student(2, "李四", 92.0));
students.add(new Student(3, "王五", 68.7));
students.add(new Student(4, "赵六", 85.5));
students.add(new Student(5, "钱七", 94.2));
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"))) {
while (true) {
Student student = (Student) ois.readObject();
System.out.println(student);
}
} catch (EOFException ignored) {
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
```
这段代码中,我们定义了一个存放学生对象的ArrayList集合students。然后我们向其中添加了5个学生对象,分别是张三、李四、王五、赵六和钱七,他们的学号、姓名和成绩分别为1、2、3、4、5、78.5、92.0、68.7、85.5和94.2。
接着,我们使用Collections.sort()方法对students集合进行降序排列。排序的依据是学生对象的成绩,采用了compareTo()方法进行比较。
然后我们使用ObjectOutputStream将排好序的学生对象写入到文件stud.dat中。在写入时,我们采用了循环的方式将每个学生对象写入到文件中。
最后,我们使用ObjectInputStream从stud.dat文件中读取学生对象并显示出来。在读取时,我们采用了EOFException异常来判断文件是否读取完毕。如果读取完毕,就跳出循环。
阅读全文