java实现Description 统计学生出勤次数,n个学生,每个学生有学号和出勤记录,该记录为10位二进制位串,1为出勤,0为未出勤。 按出勤次数降序排列输出,如果出勤次数相同,按学号从小到大排序。 Input 输入的第一个数n为学生人数。后面跟n行数据,每行包括学号和一个10位的二进制位串,中间用空格间隔。 Output 输出学生的学号和出勤次数,按出勤次数从大到小排列,如果次数相同,按学号从小到大排序。 Sample Input 4 160101 1111111100 160102 1011111011 160103 1111111111 160104 1111111110 Sample Output 160103:10 160104:9 160101:8 160102:8 Hint 要求采用面向对象思想设计
时间: 2023-12-10 10:41:31 浏览: 108
可以定义一个Student类,包含学号和出勤记录两个属性,以及一个AttendanceCounter类,用于统计学生出勤次数并排序输出。
Student类的定义如下:
```java
public class Student implements Comparable<Student> {
private String id;
private String attendance;
public Student(String id, String attendance) {
this.id = id;
this.attendance = attendance;
}
public String getId() {
return id;
}
public String getAttendance() {
return attendance;
}
public int getAttendanceCount() {
int count = 0;
for (char c : attendance.toCharArray()) {
if (c == '1') {
count++;
}
}
return count;
}
@Override
public int compareTo(Student o) {
int count1 = getAttendanceCount();
int count2 = o.getAttendanceCount();
if (count1 != count2) {
return count2 - count1;
} else {
return id.compareTo(o.getId());
}
}
}
```
AttendanceCounter类的定义如下:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class AttendanceCounter {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
List<Student> students = new ArrayList<>();
for (int i = 0; i < n; i++) {
String id = scanner.next();
String attendance = scanner.next();
students.add(new Student(id, attendance));
}
Collections.sort(students);
for (Student student : students) {
System.out.println(student.getId() + ":" + student.getAttendanceCount());
}
}
}
```
在main方法中,先读取输入的学生信息,然后调用Collections.sort方法对学生列表进行排序,最后输出每个学生的学号和出勤次数。其中,排序使用了Student类的compareTo方法,按照出勤次数降序排列,如果次数相同,按学号升序排列。
输入样例:
```
4
160101 1111111100
160102 1011111011
160103 1111111111
160104 1111111110
```
输出样例:
```
160103:10
160104:9
160101:8
160102:8
```
阅读全文