用Java实现现在他要统计班里学生的名单,但是C~K在教务系统中导出班级名单时出了问题,发现有学号相同的学生。学号相同,代表同一个学生。(如果学号相同,后来读入的学生信息会覆盖已有的学生信息) 但是工作量太大了,所以找到了会编程的你,你能帮他解决这个问题吗? 输入格式: 第一行输入一个N,代表C~K导出的名单共有N行。 接下来的N行,每一行包括一个学生的信息,数据之间用1个空格分隔,如:学号 姓名 年龄 性别。 输出格式: 第一行输出一个n,代表数据处理之后C~K的班级共有几人。 接下来的n行,按照学号从小到大的顺序输出每一个学生的信息。
时间: 2024-03-14 11:42:52 浏览: 81
以下是一个可能的Java实现,其中使用了HashMap来解决学号相同的学生信息覆盖的问题:
```java
import java.util.*;
public class DuplicateStudents {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Map<Integer, String[]> students = new HashMap<>();
for (int i = 0; i < n; i++) {
int id = sc.nextInt();
String name = sc.next();
int age = sc.nextInt();
String gender = sc.next();
String[] info = {name, Integer.toString(age), gender};
students.put(id, info);
}
System.out.println(students.size());
List<Integer> ids = new ArrayList<>(students.keySet());
Collections.sort(ids);
for (int id : ids) {
String[] info = students.get(id);
System.out.println(id + " " + info[0] + " " + info[1] + " " + info[2]);
}
}
}
```
解释一下代码的实现:
首先读入学生信息,并将其存储在HashMap中,学号作为键,姓名、年龄和性别组成的字符串数组作为值。由于HashMap不支持重复的键,所以如果有学号相同的学生,后面读入的信息会覆盖之前的信息。
接着,输出HashMap的大小,即班级人数,然后按照学号从小到大的顺序输出每个学生的信息。为了实现这个功能,我们使用了一个List来保存学号,然后对学号进行排序,并按照排好序的学号遍历HashMap,输出每个学生的信息。
阅读全文