编写程序从键盘输入某班学生的姓名和成绩并保存,然后分别按学生成绩由高到低顺序输出学生姓名和成绩,成绩相同时,则按输入次序排序
时间: 2024-09-19 11:03:11 浏览: 3
为了实现这个功能,你可以使用Java的`Scanner`类来获取用户的输入,然后使用数组或列表来存储学生的数据。这里我们将使用`ArrayList`和匿名内部类来实现自定义的比较逻辑。以下是一个简单的步骤说明:
1. 创建一个包含姓名(String)和成绩(double)的`Student`类,包括构造器和 getter/setter 方法。
```java
public class Student {
private String name;
private double score;
public Student(String name, double score) {
this.name = name;
this.score = score;
}
// getters and setters...
}
```
2. 使用 `Scanner` 获取输入,并将数据添加到 `ArrayList<Student>` 中。
```java
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<Student> students = new ArrayList<>();
while (scanner.hasNextLine()) {
String[] input = scanner.nextLine().split(" ");
if (input.length == 2) {
String name = input[0];
double score = Double.parseDouble(input[1]);
students.add(new Student(name, score));
} else {
System.out.println("Invalid input, please enter student's name and score separated by space.");
}
}
scanner.close();
}
}
```
3. 定义一个比较器 `Comparator` 来按照成绩降序排列,并如果成绩相同则按照输入次序排序。
```java
Collections.sort(students, Comparator.comparingDouble(Student::getScore).reversed()
.thenComparing((s1, s2) -> Integer.compare(s1.getName().compareTo(s2.getName())));
```
现在,当运行这段代码时,学生数据会被按照成绩从高到低排序。如果成绩相同,它们将保持原始的输入顺序。