Java案例:统计两队失误次数,判断哪队更少
下面给你一个完整的 Java 案例,模拟两队比赛中的失误统计,并判断哪队失误更少。

案例需求
- 有两个队:红队 和 蓝队
- 每队各有多名队员
- 记录每名队员的失误次数
- 统计每队总失误次数
- 输出失误更少的队伍
完整代码
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class MistakeCounter {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 用 Map 保存每队的队员失误数据:key=队员名, value=失误次数
Map<String, Integer> redTeam = new HashMap<>();
Map<String, Integer> blueTeam = new HashMap<>();
System.out.println("=== 录入红队失误数据 ===");
inputTeamData(sc, redTeam, "红队");
System.out.println("\n=== 录入蓝队失误数据 ===");
inputTeamData(sc, blueTeam, "蓝队");
// 统计总失误
int redTotal = sumMistakes(redTeam);
int blueTotal = sumMistakes(blueTeam);
System.out.println("\n========= 统计结果 =========");
printTeamResult("红队", redTeam, redTotal);
printTeamResult("蓝队", blueTeam, blueTotal);
System.out.println("\n========= =========");
if (redTotal < blueTotal) {
System.out.println("红队失误更少,胜出!(红队 " + redTotal + " : 蓝队 " + blueTotal + ")");
} else if (blueTotal < redTotal) {
System.out.println("蓝队失误更少,胜出!(蓝队 " + blueTotal + " : 红队 " + redTotal + ")");
} else {
System.out.println("两队失误相同!(各 " + redTotal + " 次)");
}
sc.close();
}
/**
* 录入某个队的队员数据
*/
private static void inputTeamData(Scanner sc, Map<String, Integer> team, String teamName) {
System.out.print("请输入" + teamName + "队员人数:");
int n = sc.nextInt();
sc.nextLine(); // 吃掉换行符
for (int i = 1; i <= n; i++) {
System.out.print("请输入第 " + i + " 名队员姓名:");
String name = sc.nextLine();
System.out.print("请输入 " + name + " 的失误次数:");
int mistakes = sc.nextInt();
sc.nextLine(); // 吃掉换行符
team.put(name, mistakes);
}
}
/**
* 计算某队总失误次数
*/
private static int sumMistakes(Map<String, Integer> team) {
int sum = 0;
for (int v : team.values()) {
sum += v;
}
return sum;
}
/**
* 打印某队的详细结果
*/
private static void printTeamResult(String teamName, Map<String, Integer> team, int total) {
System.out.println(teamName + " 队员失误明细:");
for (Map.Entry<String, Integer> entry : team.entrySet()) {
System.out.println(" " + entry.getKey() + " : " + entry.getValue() + " 次");
}
System.out.println(teamName + " 总失误次数:" + total);
System.out.println();
}
}
运行示例
=== 录入红队失误数据 ===
请输入红队队员人数:3
请输入第 1 名队员姓名:小明
请输入 小明 的失误次数:2
请输入第 2 名队员姓名:小红
请输入 小红 的失误次数:3
请输入第 3 名队员姓名:小刚
请输入 小刚 的失误次数:1
=== 录入蓝队失误数据 ===
请输入蓝队队员人数:3
请输入第 1 名队员姓名:小A
请输入 小A 的失误次数:4
请输入第 2 名队员姓名:小B
请输入 小B 的失误次数:1
请输入第 3 名队员姓名:小C
请输入 小C 的失误次数:2
========= 统计结果 =========
红队 队员失误明细:
小明 : 2 次
小红 : 3 次
小刚 : 1 次
红队 总失误次数:6
蓝队 队员失误明细:
小A : 4 次
小B : 1 次
小C : 2 次
蓝队 总失误次数:7
========= =========
红队失误更少,胜出!(红队 6 : 蓝队 7)
关键点解析
| 知识点 | 用途 |
|---|---|
Map<String, Integer> |
保存"队员名 → 失误次数"的映射 |
Scanner |
从控制台读取输入 |
sc.nextLine() 与 sc.nextInt() 混用 |
注意吞换行符问题 |
方法封装 inputTeamData |
复用红蓝两队的录入逻辑 |
sumMistakes |
遍历 values() 求总失误 |
| 比较大小 | 判断哪队失误更少 |
扩展思路
- 更简洁的版本:不需要保存每个队员,只累加总分即可。
- 排序输出:列出失误最多的队员。
- 文件读取:从 CSV 文件读取队员数据,而不是手动输入。
如果你需要 只统计总分(不记录每个人) 的简化版本,我也可以补一份给你。