定义包含学号、姓名和成绩信息的学生类Student。在测试类中定义存放n个学生对象存放到某个集合对象中(具体集合自行确定),然后按成绩进行降序排列,并将排序结果(类Student对象)保存到文件stud.dat中,再读出文件stud.dat中所有的学生信息并显示。
时间: 2024-03-01 20:51:11 浏览: 63
1_lower7y7_定义一个包含学生信息(学号_成绩)的顺序表和链表(二选一)_姓名_使其具有如下功能_
5星 · 资源好评率100%
好的,我理解了你的问题。以下是代码实现:
```java
import java.io.*;
import java.util.*;
class Student implements 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);
}
public String toString() {
return "学号:" + id + " 姓名:" + name + " 成绩:" + score;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生人数:");
int n = scanner.nextInt();
List<Student> students = new ArrayList<>();
for (int i = 0; i < n; i++) {
System.out.println("请输入第" + (i + 1) + "个学生的学号、姓名和成绩:");
int id = scanner.nextInt();
String name = scanner.next();
double score = scanner.nextDouble();
students.add(new Student(id, name, score));
}
Collections.sort(students);
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("stud.dat"));
for (Student student : students) {
oos.writeObject(student);
}
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stud.dat"));
while (true) {
Student student = (Student) ois.readObject();
System.out.println(student);
}
} catch (EOFException e) {
System.out.println("文件读取完毕!");
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
}
}
```
这里使用了Java中的序列化技术,将对象写入文件中,然后再从文件中读取对象。运行程序后,会依次输入学生的学号、姓名和成绩,然后程序会将这些学生对象按照成绩降序排列,保存到文件stud.dat中。最后程序会从文件中读取所有学生信息并显示。
阅读全文