用Java实现某公司现需要统计员工出勤次数,具体要求如下: 输入样例: Mark Tom Ivor Mark Ivor Mark Jack end 输入样例解释: 每行表示某天出勤的员工名单,以空格间隔。 end表示输入结束 输出样例: Mark 3 Ivor 2 Tom 1 Jack 1 输出样例解释: 按出勤天数倒序输出,若出勤次数相同则按输入顺序输出(即先输入的先输出,样例中Tom比Jack先输入,因此先输出Tom)。每名员工占一行,格式为员工名+空格+出勤次数
时间: 2024-03-22 16:39:37 浏览: 208
基于Java的员工考勤系统设计与实现(论文+源码)-kaic.doc
好的,这是一个简单的Java统计出勤次数的问题。下面是代码实现:
```java
import java.util.*;
public class AttendanceCounter {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Map<String, Integer> attendanceMap = new HashMap<>();
String input = scanner.nextLine();
while (!input.equals("end")) {
String[] names = input.split(" ");
for (String name : names) {
attendanceMap.put(name, attendanceMap.getOrDefault(name, 0) + 1);
}
input = scanner.nextLine();
}
List<Map.Entry<String, Integer>> attendanceList = new ArrayList<>(attendanceMap.entrySet());
attendanceList.sort((o1, o2) -> {
int result = o2.getValue() - o1.getValue();
if (result != 0) {
return result;
} else {
return attendanceMap.get(o1.getKey()) - attendanceMap.get(o2.getKey());
}
});
for (Map.Entry<String, Integer> entry : attendanceList) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
```
代码思路:
1. 使用Scanner类从控制台读取输入,将员工出勤记录存放在Map<String, Integer> attendanceMap中,其中键为员工名字,值为该员工的出勤次数。
2. 为了方便对出勤次数进行排序,我们将Map中的键值对转换为List<Map.Entry<String, Integer>> attendanceList,然后使用Collections.sort()方法进行排序。
3. 排序时,我们首先按照出勤次数从大到小排序,如果出勤次数相同,则按照员工名字在输入中的顺序排序。
4. 最后遍历排序后的List,输出每个员工的名字和出勤次数。
注意事项:
1. 这里的排序使用了Java 8中的Lambda表达式,如果不熟悉Lambda表达式的使用,可以将排序部分的代码替换为传统的Comparator实现方式。
2. 如果输入中存在空格,可以使用StringTokenizer类或者正则表达式进行分割,这里我使用了String类的split()方法。
阅读全文