java采用面向对象思想设计统计学生出勤次数,n个学生,每个学生有学号和出勤记录,该记录为10位二进制位串,1为出勤,0为未出勤。输出结果按出勤次数从大到小排列,如果次数相同,按学号从小到大排序。有多组输入
时间: 2023-09-21 16:13:17 浏览: 85
可以定义一个学生类,其中包含学号和出勤记录两个属性。然后,使用一个数组或者集合来存储所有学生信息,并对每个学生的出勤记录进行统计。
具体实现代码如下:
```java
import java.util.*;
public class 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 (int i = 0; i < attendance.length(); i++) {
if (attendance.charAt(i) == '1') {
count++;
}
}
return count;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
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, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int count1 = s1.getAttendanceCount();
int count2 = s2.getAttendanceCount();
if (count1 != count2) {
return count2 - count1; // 按出勤次数从大到小排列
} else {
return s1.getId().compareTo(s2.getId()); // 次数相同,按学号从小到大排序
}
}
});
for (Student student : students) {
System.out.println(student.getId() + " " + student.getAttendance());
}
}
}
}
```
在上面的代码中,我们定义了一个 `getAttendanceCount` 方法来获取学生的出勤次数。然后,使用 `Collections.sort` 方法来对学生列表进行排序,排序规则是按出勤次数从大到小排列,如果次数相同,按学号从小到大排序。最后,输出排序后的学生信息即可。
阅读全文