定义包含学号、姓名和成绩信息的学生类Student。在测试类中定义存放n个学生对象存放到某个集合对象中(具体集合自行确定),然后按成绩进行降序排列,并将排序结果(类Student对象)保存到文件stud.dat中,再读出文件stud.dat中所有的学生信息并显示。 说明:注意成绩排序,可以采用自然排序或客户排序,也可以采用集合类的sort()方法进行。
时间: 2024-03-03 11:47:36 浏览: 48
以下是一个实现上述功能的代码示例:
Student.java 文件:
```java
import java.io.Serializable;
public class Student implements Comparable<Student>, Serializable {
private String id;
private String name;
private double score;
public Student(String id, String name, double score) {
this.id = id;
this.name = name;
this.score = score;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public double getScore() {
return score;
}
@Override
public int compareTo(Student o) {
if (this.score > o.score) {
return -1;
} else if (this.score < o.score) {
return 1;
} else {
return 0;
}
}
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", score=" + score +
'}';
}
}
```
Test.java 文件:
```java
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
// 创建学生集合
List<Student> students = new ArrayList<>();
students.add(new Student("001", "张三", 85));
students.add(new Student("002", "李四", 92));
students.add(new Student("003", "王五", 78));
students.add(new Student("004", "赵六", 88));
students.add(new Student("005", "钱七", 97));
// 按成绩降序排序
Collections.sort(students);
// 保存到文件
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("stud.dat"));
oos.writeObject(students);
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
// 从文件中读取并显示
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stud.dat"));
List<Student> studentsFromFile = (List<Student>) ois.readObject();
ois.close();
for (Student student : studentsFromFile) {
System.out.println(student);
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
```
在这个例子中,我们定义了一个Student类,它包含了学号、姓名和成绩三个属性,并实现了Comparable接口,用于按成绩降序排列。在测试类Test中,我们创建了一个学生集合,将其按成绩降序排序,并将排序结果保存到文件stud.dat中。然后我们又从文件中读取出所有学生信息,并将其显示出来。
注意,为了将学生对象保存到文件中,我们使用了ObjectOutputStream类,并将其包装在FileOutputStream中。同样地,为了从文件中读取学生对象,我们使用了ObjectInputStream类,并将其包装在FileInputStream中。另外,为了使学生类能够被序列化,也就是能够被保存到文件中,我们让它实现了Serializable接口。
阅读全文