java案例统计失误次数哪队更少?

wen java案例 2

Java案例:统计两队失误次数,判断哪队更少

下面给你一个完整的 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() 求总失误
比较大小 判断哪队失误更少

扩展思路

  1. 更简洁的版本:不需要保存每个队员,只累加总分即可。
  2. 排序输出:列出失误最多的队员。
  3. 文件读取:从 CSV 文件读取队员数据,而不是手动输入。

如果你需要 只统计总分(不记录每个人) 的简化版本,我也可以补一份给你。

抱歉,评论功能暂时关闭!