帮我写一个Java程序,编写有一个程序,该程序输入职工工号和完成的产品数量,程序允许同一职工有多次输入,由程序对其完成的产品数量实现累计。程序按完成数量对他们排序,并确定他们的名次。按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们的工号(工号由小到大顺序输出)。
时间: 2024-05-11 13:15:37 浏览: 77
好的,这是一个很好的Java编程问题。以下是一个示例代码,可以实现您所描述的功能:
```java
import java.util.*;
public class WorkerRanking {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Map<String, Integer> workerMap = new HashMap<>();
System.out.print("请输入职工工号和完成的产品数量:");
while(input.hasNext()) {
String workerID = input.next();
if(workerID.equals("quit")) {
break;
}
int productCount = input.nextInt();
workerMap.put(workerID, workerMap.getOrDefault(workerID, 0) + productCount);
System.out.print("请输入职工工号和完成的产品数量:");
}
List<Map.Entry<String, Integer>> workerList = new ArrayList<>(workerMap.entrySet());
Collections.sort(workerList, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> entry1, Map.Entry<String, Integer> entry2) {
return entry2.getValue().compareTo(entry1.getValue());
}
});
int rank = 0;
int lastScore = -1;
for(Map.Entry<String, Integer> workerEntry : workerList) {
if(workerEntry.getValue() != lastScore) {
rank++;
}
lastScore = workerEntry.getValue();
System.out.println("第" + rank + "名:" + workerEntry.getKey() + " 完成数量:" + workerEntry.getValue());
}
}
}
```
上述代码使用了Map来存储每个职工的工号和完成的产品数量,并对其进行累计。接着使用List和Comparator对其进行排序,最后按完成数量输出名次和职工信息。
希望这可以帮到您,如果有任何问题,欢迎随时问我。
阅读全文