用java定义包含学号、姓名和成绩信息的学生类Student。在测试类中定义存放n个学生对象存放到某个集合对象中(具体集合自行确定),然后按成绩进行降序排列,并将排序结果(类Student对象)保存到文件stud.dat中,再读出文件stud.dat中所有的学生信息并显示。 说明:注意成绩排序,可以采用自然排序或客户排序,也可以采用集合类的sort()方法进行。使用两种办法
时间: 2024-02-29 07:52:27 浏览: 68
设计一个学生类Student(学生学号、姓名、数学、英语、计算机成绩;)
5星 · 资源好评率100%
好的,我来回答你的问题。
首先,以下是定义的学生类Student:
```java
public class Student implements Comparable<Student>, Serializable {
private String studentId;
private String name;
private int score;
public Student(String studentId, String name, int score) {
this.studentId = studentId;
this.name = name;
this.score = score;
}
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public int compareTo(Student student) {
return student.score - this.score;
}
@Override
public String toString() {
return studentId + "\t" + name + "\t" + score;
}
}
```
这里我们实现了Comparable接口,重写了compareTo()方法,用于成绩降序排序。同时,我们也实现了Serializable接口,用于将学生对象保存到文件中。
方法一:使用ArrayList集合进行存储和排序
```java
import java.io.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
ArrayList<Student> studentList = new ArrayList<>();
studentList.add(new Student("1001", "张三", 80));
studentList.add(new Student("1002", "李四", 90));
studentList.add(new Student("1003", "王五", 85));
studentList.add(new Student("1004", "赵六", 70));
Collections.sort(studentList);
try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("stud.dat"))) {
for (Student student : studentList) {
outputStream.writeObject(student);
}
} catch (IOException e) {
e.printStackTrace();
}
try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("stud.dat"))) {
while (true) {
Student student = (Student) inputStream.readObject();
System.out.println(student);
}
} catch (EOFException e) {
System.out.println("读取完成");
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
```
这里我们使用了ArrayList集合来存储学生对象,然后使用Collections.sort()方法进行排序。接着,我们使用ObjectOutputStream对象将学生对象写入到文件中,然后使用ObjectInputStream对象读取文件中的学生对象并显示。
方法二:使用TreeSet集合进行存储和排序
```java
import java.io.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
TreeSet<Student> studentSet = new TreeSet<>();
studentSet.add(new Student("1001", "张三", 80));
studentSet.add(new Student("1002", "李四", 90));
studentSet.add(new Student("1003", "王五", 85));
studentSet.add(new Student("1004", "赵六", 70));
try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("stud.dat"))) {
for (Student student : studentSet) {
outputStream.writeObject(student);
}
} catch (IOException e) {
e.printStackTrace();
}
try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("stud.dat"))) {
while (true) {
Student student = (Student) inputStream.readObject();
System.out.println(student);
}
} catch (EOFException e) {
System.out.println("读取完成");
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
```
这里我们使用了TreeSet集合来存储学生对象,TreeSet集合默认按照自然排序进行排序。接着,我们使用ObjectOutputStream对象将学生对象写入到文件中,然后使用ObjectInputStream对象读取文件中的学生对象并显示。
注意:在使用ObjectInputStream对象读取文件中的学生对象时,我们使用了EOFException来判断是否读取完成。同时,在catch块中也要捕获ClassNotFoundException异常,因为我们读取的是序列化后的学生对象。
阅读全文