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

wen java案例 1

本文目录导读:

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

  1. 解决方案
  2. 扩展版本(支持手动输入)
  3. 运行示例

我来为您设计一个Java程序,用于统计两队比赛中的失误次数,并比较哪队失误更少。

解决方案

import java.util.*;
public class TurnoverStatistics {
    // 队伍类
    static class Team {
        private String name;
        private int totalTurnovers;
        private Map<String, Integer> turnoversByPlayer;
        public Team(String name) {
            this.name = name;
            this.totalTurnovers = 0;
            this.turnoversByPlayer = new HashMap<>();
        }
        public void addTurnover(String playerName) {
            totalTurnovers++;
            turnoversByPlayer.merge(playerName, 1, Integer::sum);
        }
        public String getName() {
            return name;
        }
        public int getTotalTurnovers() {
            return totalTurnovers;
        }
        public Map<String, Integer> getTurnoversByPlayer() {
            return turnoversByPlayer;
        }
        // 获取失误最多的球员
        public String getHighestTurnoverPlayer() {
            return turnoversByPlayer.entrySet().stream()
                .max(Map.Entry.comparingByValue())
                .map(Map.Entry::getKey)
                .orElse("无");
        }
    }
    // 统计比较器
    public static void compareTeams(Team teamA, Team teamB) {
        System.out.println("========== 失误统计对比 ==========");
        System.out.println(teamA.getName() + " 总失误: " + teamA.getTotalTurnovers() + " 次");
        System.out.println(teamB.getName() + " 总失误: " + teamB.getTotalTurnovers() + " 次");
        System.out.println("--------------------------------");
        if (teamA.getTotalTurnovers() < teamB.getTotalTurnovers()) {
            System.out.println("🏆 " + teamA.getName() + " 失误更少,表现更好!");
        } else if (teamB.getTotalTurnovers() < teamA.getTotalTurnovers()) {
            System.out.println("🏆 " + teamB.getName() + " 失误更少,表现更好!");
        } else {
            System.out.println("⚖️ 两队失误次数相同,打成平手!");
        }
        System.out.println("--------------------------------");
        System.out.println(teamA.getName() + " 失误最多的球员: " + 
            teamA.getHighestTurnoverPlayer() + " (" + 
            teamA.getTurnoversByPlayer().getOrDefault(teamA.getHighestTurnoverPlayer(), 0) + " 次)");
        System.out.println(teamB.getName() + " 失误最多的球员: " + 
            teamB.getHighestTurnoverPlayer() + " (" + 
            teamB.getTurnoversByPlayer().getOrDefault(teamB.getHighestTurnoverPlayer(), 0) + " 次)");
    }
    // 生成模拟数据
    public static void simulateMatch(Team teamA, Team teamB) {
        Random random = new Random();
        String[] playersA = {"球员A1", "球员A2", "球员A3", "球员A4", "球员A5"};
        String[] playersB = {"球员B1", "球员B2", "球员B3", "球员B4", "球员B5"};
        // 模拟4节比赛,每节随机产生失误
        for (int quarter = 1; quarter <= 4; quarter++) {
            int turnoversA = random.nextInt(6); // 0-5次失误
            int turnoversB = random.nextInt(6);
            for (int i = 0; i < turnoversA; i++) {
                teamA.addTurnover(playersA[random.nextInt(playersA.length)]);
            }
            for (int i = 0; i < turnoversB; i++) {
                teamB.addTurnover(playersB[random.nextInt(playersB.length)]);
            }
            System.out.println("第" + quarter + "节: " + 
                teamA.getName() + " " + turnoversA + " 次失误, " + 
                teamB.getName() + " " + turnoversB + " 次失误");
        }
    }
    // 主方法
    public static void main(String[] args) {
        // 创建两支球队
        Team teamA = new Team("湖人队");
        Team teamB = new Team("勇士队");
        System.out.println("=== 比赛失误统计系统 ===");
        System.out.println("正在模拟比赛数据...");
        System.out.println();
        // 模拟比赛
        simulateMatch(teamA, teamB);
        System.out.println();
        // 对比统计结果
        compareTeams(teamA, teamB);
        // 详细统计显示
        System.out.println("\n========== 详细统计 ==========");
        printTeamStats(teamA);
        printTeamStats(teamB);
    }
    // 打印队伍详细统计
    private static void printTeamStats(Team team) {
        System.out.println(team.getName() + " 球员失误详情:");
        team.getTurnoversByPlayer().entrySet().stream()
            .sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
            .forEach(entry -> 
                System.out.println("  " + entry.getKey() + ": " + entry.getValue() + " 次"));
        System.out.println();
    }
}

扩展版本(支持手动输入)

import java.util.*;
public class TurnoverManager {
    private static Scanner scanner = new Scanner(System.in);
    public static void main(String[] args) {
        System.out.println("🏀 篮球比赛失误统计系统");
        System.out.println("============================");
        // 输入两队名称
        System.out.print("请输入A队名称: ");
        String teamAName = scanner.nextLine();
        System.out.print("请输入B队名称: ");
        String teamBName = scanner.nextLine();
        // 创建队伍
        Team teamA = new Team(teamAName);
        Team teamB = new Team(teamBName);
        // 输入失误次数
        inputTurnovers(teamA, "A");
        inputTurnovers(teamB, "B");
        // 比较结果
        compareTeams(teamA, teamB);
        scanner.close();
    }
    private static void inputTurnovers(Team team, String teamLabel) {
        System.out.println("\n请输入" + teamLabel + "队(" + team.getName() + ")的失误数据:");
        while (true) {
            System.out.print("输入球员名称(输入quit结束): ");
            String playerName = scanner.nextLine();
            if (playerName.equalsIgnoreCase("quit")) {
                break;
            }
            System.out.print("输入失误次数: ");
            try {
                int times = Integer.parseInt(scanner.nextLine());
                for (int i = 0; i < times; i++) {
                    team.addTurnover(playerName);
                }
                System.out.println("✓ 已记录");
            } catch (NumberFormatException e) {
                System.out.println("❌ 输入无效,请重新输入");
            }
        }
    }
    private static void compareTeams(Team teamA, Team teamB) {
        System.out.println("\n========== 统计结果 ==========");
        System.out.printf("%s: %d 次失误%n", teamA.getName(), teamA.getTotalTurnovers());
        System.out.printf("%s: %d 次失误%n", teamB.getName(), teamB.getTotalTurnovers());
        String result = teamA.getTotalTurnovers() < teamB.getTotalTurnovers() ? 
            teamA.getName() : 
            (teamB.getTotalTurnovers() < teamA.getTotalTurnovers() ? 
                teamB.getName() : "平局");
        System.out.println("============================");
        System.out.println("失误更少的团队: " + result);
        // 显示每个球员的失误统计
        System.out.println("\n--- 球员明细 ---");
        displayPlayerStats(teamA);
        displayPlayerStats(teamB);
    }
    private static void displayPlayerStats(Team team) {
        System.out.println(team.getName() + ":");
        team.getTurnoversByPlayer().forEach((player, count) -> 
            System.out.println("  " + player + ": " + count + "次"));
    }
}

运行示例

=== 比赛失误统计系统 ===
正在模拟比赛数据...
第1节: 湖人队 2 次失误, 勇士队 3 次失误
第2节: 湖人队 4 次失误, 勇士队 2 次失误
第3节: 湖人队 1 次失误, 勇士队 3 次失误
第4节: 湖人队 3 次失误, 勇士队 2 次失误
========== 失误统计对比 ==========
湖人队 总失误: 10 次
勇士队 总失误: 10 次
--------------------------------
⚖️ 两队失误次数相同,打成平手!
--------------------------------
湖人队 失误最多的球员: 球员A3 (3 次)
勇士队 失误最多的球员: 球员B2 (3 次)
========== 详细统计 ==========
湖人队 球员失误详情:
  球员A3: 3 次
  球员A1: 2 次
  球员A4: 2 次
  ...

这个程序提供了完整的篮球比赛失误统计功能,可以灵活适应不同的使用场景!

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