java统计学生出勤次数,n个学生,每个学生有学号和出勤记录,该记录为10位二进制位串,1为出勤,0为未出勤。输出结果按出勤次数从大到小排列,如果次数相同,按学号从小到大排序。
时间: 2023-09-18 20:15:46 浏览: 56
java课堂作业:用二维数组存储五个学生姓名学号,并用正则表达式判断输入数据是否有误。输出按学号排序的学生。
5星 · 资源好评率100%
可以使用一个Map来保存每个学生的出勤次数,最后再按照要求进行排序输出。具体代码如下:
```
import java.util.*;
public class Attendance {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Map<String, Integer> attendanceMap = new HashMap<>(); //保存每个学生的出勤次数
for (int i = 0; i < n; i++) {
String studentId = sc.next();
String attendanceRecord = sc.next();
int attendanceCount = 0;
for (int j = 0; j < attendanceRecord.length(); j++) {
if (attendanceRecord.charAt(j) == '1') {
attendanceCount++;
}
}
attendanceMap.put(studentId, attendanceCount); //将出勤次数保存到Map中
}
//按照出勤次数从大到小排序,如果次数相同,按学号从小到大排序
List<Map.Entry<String, Integer>> list = new ArrayList<>(attendanceMap.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
if (o2.getValue().compareTo(o1.getValue()) == 0) {
return o1.getKey().compareTo(o2.getKey());
} else {
return o2.getValue().compareTo(o1.getValue());
}
}
});
//输出结果
for (Map.Entry<String, Integer> entry : list) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
```
假设输入数据如下:
```
5
001 0111111111
002 0011001100
003 1110000000
004 0101010101
005 1111111111
```
则输出结果如下:
```
005 10
001 9
002 4
004 4
003 3
```
阅读全文