每行表示某天出勤的员工名单,以空格间隔。 end表示输入结束.按出勤天数倒序输出,若出勤次数相同则按输入顺序输出(即先输入的先输出,样例中Tom比Jack先输入,因此先输出Tom)。每名员工占一行,格式为员工名+空格+出勤次数
时间: 2024-03-20 15:40:52 浏览: 113
学生出勤统计.zip易语言项目例子源码下载
好的,这是Java PTA7-5出勤统计进阶版,需要你编写一个程序来统计每个员工的出勤情况,并按照题目要求输出。以下是参考代码:
```
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Map<String, Integer> map = new LinkedHashMap<>(); // 使用 LinkedHashMap 保证输入顺序
while (sc.hasNext()) {
String line = sc.nextLine();
if (line.equals("end")) {
break;
}
String[] names = line.split(" ");
for (String name : names) {
if (!map.containsKey(name)) {
map.put(name, 1);
} else {
map.put(name, map.get(name) + 1);
}
}
}
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
if (o2.getValue() - o1.getValue() != 0) { // 首先按照出勤天数倒序排序
return o2.getValue() - o1.getValue();
} else { // 若出勤天数相同,则按照输入顺序排序
int index1 = -1, index2 = -1;
String[] lines = sc.toString().split(System.getProperty("line.separator"));
for (int i = 0; i < lines.length; i++) {
if (lines[i].equals(o1.getKey())) {
index1 = i;
}
if (lines[i].equals(o2.getKey())) {
index2 = i;
}
}
return index1 - index2;
}
}
});
for (Map.Entry<String, Integer> entry : list) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
```
程序的基本思路是:与之前的程序基本相同,只是在排序时需要增加一些判断。首先按照出勤天数倒序排序,若出勤天数相同,则按照输入顺序排序。为了实现输入顺序排序,我们可以将输入的每一行字符串与 `sc.toString()` 的结果进行比较,从而获取该字符串在输入流中的位置。最后按照排序结果遍历 `list` 打印每个员工的出勤情况。
希望这个回答能够帮到你,如果还有其他问题,可以继续问我哦。
阅读全文