java案例统计红黄牌数量哪队更多?

wen java案例 3

本文目录导读:

java案例统计红黄牌数量哪队更多?

  1. 完整代码实现
  2. 程序运行示例
  3. 主要功能说明

我来为您设计一个Java程序,用于统计两支球队比赛中红黄牌数量并比较哪队更多。

完整代码实现

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class CardStatistics {
    // 定义牌的类型常量
    static final String YELLOW_CARD = "黄牌";
    static final String RED_CARD = "红牌";
    // 球队类
    static class Team {
        String name;
        int yellowCards;
        int redCards;
        public Team(String name) {
            this.name = name;
            this.yellowCards = 0;
            this.redCards = 0;
        }
        // 计算总罚牌数
        public int getTotalCards() {
            return yellowCards + redCards;
        }
        // 计算罚牌加权分(黄牌1分,红牌2分)
        public int getCardScore() {
            return yellowCards + redCards * 2;
        }
    }
    // 球员类
    static class Player {
        String name;
        int number;
        String team;
        Map<String, Integer> cards = new HashMap<>();
        public Player(String name, int number, String team) {
            this.name = name;
            this.number = number;
            this.team = team;
            cards.put("黄牌", 0);
            cards.put("红牌", 0);
        }
        public void addCard(String cardType) {
            cards.put(cardType, cards.get(cardType) + 1);
        }
    }
    // 比赛记录类
    static class MatchRecord {
        String team;
        String playerName;
        String cardType;
        public MatchRecord(String team, String playerName, String cardType) {
            this.team = team;
            this.playerName = playerName;
            this.cardType = cardType;
        }
    }
    public static void main(String[] args) {
        List<MatchRecord> records = new ArrayList<>();
        Map<String, Team> teams = new HashMap<>();
        Map<String, Player> players = new HashMap<>();
        Scanner scanner = new Scanner(System.in);
        System.out.println("=== 足球比赛红黄牌统计系统 ===");
        System.out.println("请输入球队信息(格式:队名 如:江苏队)");
        System.out.print("请输入主队名称:");
        String homeTeam = scanner.nextLine();
        System.out.print("请输入客队名称:");
        String awayTeam = scanner.nextLine();
        teams.put(homeTeam, new Team(homeTeam));
        teams.put(awayTeam, new Team(awayTeam));
        System.out.println("\n请输入比赛事件记录(输入'end'结束)");
        System.out.println("格式:球队 球员姓名 球员号码 牌类型(黄牌/红牌)");
        System.out.println("示例:江苏队 张三 10 黄牌");
        // 输入比赛事件
        while (true) {
            System.out.print("请输入:");
            String input = scanner.nextLine();
            if (input.equalsIgnoreCase("end")) {
                break;
            }
            String[] parts = input.split(" ");
            if (parts.length != 4) {
                System.out.println("输入格式错误,请重新输入!");
                continue;
            }
            String teamName = parts[0];
            String playerName = parts[1];
            int playerNumber = Integer.parseInt(parts[2]);
            String cardType = parts[3];
            // 检查牌类型是否有效
            if (!cardType.equals("黄牌") && !cardType.equals("红牌")) {
                System.out.println("无效的牌类型,请输入'黄牌'或'红牌'!");
                continue;
            }
            // 检查球队是否存在
            if (!teams.containsKey(teamName)) {
                System.out.println("球队不存在,请确认队名!");
                continue;
            }
            // 记录比赛事件
            records.add(new MatchRecord(teamName, playerName, cardType));
            // 更新球队统计
            Team team = teams.get(teamName);
            if (cardType.equals("黄牌")) {
                team.yellowCards++;
            } else if (cardType.equals("红牌")) {
                team.redCards++;
            }
            // 更新球员统计
            String playerKey = teamName + "-" + playerName + "-" + playerNumber;
            Player player = players.getOrDefault(playerKey, 
                new Player(playerName, playerNumber, teamName));
            player.addCard(cardType);
            players.put(playerKey, player);
        }
        scanner.close();
        // 输出统计结果
        printStatistics(teams, players, records);
        // 比较哪队红黄牌更多
        compareTeams(teams.get(homeTeam), teams.get(awayTeam));
    }
    // 打印统计信息
    private static void printStatistics(Map<String, Team> teams, 
                                      Map<String, Player> players,
                                      List<MatchRecord> records) {
        System.out.println("\n===== 比赛统计报告 =====");
        // 各队统计
        System.out.println("\n【球队红黄牌统计】");
        for (Team team : teams.values()) {
            System.out.println(team.name + ":");
            System.out.println("  黄牌: " + team.yellowCards + " 张");
            System.out.println("  红牌: " + team.redCards + " 张");
            System.out.println("  总牌数: " + team.getTotalCards() + " 张");
            System.out.println("  加权分: " + team.getCardScore() + " 分");
            System.out.println();
        }
        // 球员统计
        System.out.println("\n【球员红黄牌统计】");
        for (Player player : players.values()) {
            System.out.println(player.team + " - " + player.name + 
                             " (" + player.number + "号): " +
                             "黄牌 " + player.cards.get("黄牌") + " 张, " +
                             "红牌 " + player.cards.get("红牌") + " 张");
        }
        // 比赛记录
        System.out.println("\n【比赛事件记录】");
        for (int i = 0; i < records.size(); i++) {
            MatchRecord record = records.get(i);
            System.out.println((i + 1) + ". " + record.team + 
                             " " + record.playerName + 
                             " " + record.cardType);
        }
    }
    // 比较两队红黄牌数量
    private static void compareTeams(Team team1, Team team2) {
        System.out.println("\n===== 红黄牌对比 =====");
        // 比较黄牌
        System.out.println("【黄牌数量对比】");
        System.out.println(team1.name + " 黄牌: " + team1.yellowCards);
        System.out.println(team2.name + " 黄牌: " + team2.yellowCards);
        if (team1.yellowCards > team2.yellowCards) {
            System.out.println("→ " + team1.name + " 黄牌更多");
        } else if (team1.yellowCards < team2.yellowCards) {
            System.out.println("→ " + team2.name + " 黄牌更多");
        } else {
            System.out.println("→ 两队黄牌数量相同");
        }
        // 比较红牌
        System.out.println("\n【红牌数量对比】");
        System.out.println(team1.name + " 红牌: " + team1.redCards);
        System.out.println(team2.name + " 红牌: " + team2.redCards);
        if (team1.redCards > team2.redCards) {
            System.out.println("→ " + team1.name + " 红牌更多");
        } else if (team1.redCards < team2.redCards) {
            System.out.println("→ " + team2.name + " 红牌更多");
        } else {
            System.out.println("→ 两队红牌数量相同");
        }
        // 比较总牌数
        System.out.println("\n【总牌数对比】");
        System.out.println(team1.name + " 总牌数: " + team1.getTotalCards());
        System.out.println(team2.name + " 总牌数: " + team2.getTotalCards());
        if (team1.getTotalCards() > team2.getTotalCards()) {
            System.out.println("→ " + team1.name + " 红黄牌总数更多");
        } else if (team1.getTotalCards() < team2.getTotalCards()) {
            System.out.println("→ " + team2.name + " 红黄牌总数更多");
        } else {
            System.out.println("→ 两队红黄牌总数相同");
        }
        // 比较加权分
        System.out.println("\n【惩罚加权分对比】(黄牌1分,红牌2分)");
        System.out.println(team1.name + " 加权分: " + team1.getCardScore());
        System.out.println(team2.name + " 加权分: " + team2.getCardScore());
        if (team1.getCardScore() > team2.getCardScore()) {
            System.out.println("→ " + team1.name + " 惩罚更严重");
        } else if (team1.getCardScore() < team2.getCardScore()) {
            System.out.println("→ " + team2.name + " 惩罚更严重");
        } else {
            System.out.println("→ 两队惩罚严重程度相同");
        }
        // 最终结论
        System.out.println("\n【最终结论】");
        int team1Total = team1.getCardScore();
        int team2Total = team2.getCardScore();
        if (team1Total > team2Total) {
            System.out.println("🏆 " + team1.name + " 红黄牌更多!");
        } else if (team1Total < team2Total) {
            System.out.println("🏆 " + team2.name + " 红黄牌更多!");
        } else {
            System.out.println("⚖️ 两队红黄牌数量持平!");
        }
    }
}

程序运行示例

=== 足球比赛红黄牌统计系统 ===
请输入球队信息(格式:队名 如:江苏队)
请输入主队名称:江苏队
请输入客队名称:浙江队
请输入比赛事件记录(输入'end'结束)
格式:球队 球员姓名 球员号码 牌类型(黄牌/红牌)
示例:江苏队 张三 10 黄牌
请输入:江苏队 张三 10 黄牌
请输入:江苏队 李四 8 黄牌
请输入:浙江队 王五 7 红牌
请输入:江苏队 小明 11 黄牌
请输入:浙江队 刘六 9 黄牌
请输入:end
===== 比赛统计报告 =====
【球队红黄牌统计】
江苏队:
  黄牌: 3 张
  红牌: 0 张
  总牌数: 3 张
  加权分: 3 分
浙江队:
  黄牌: 1 张
  红牌: 1 张
  总牌数: 2 张
  加权分: 3 分
【球员红黄牌统计】
江苏队 - 张三 (10号): 黄牌 1 张, 红牌 0 张
江苏队 - 李四 (8号): 黄牌 1 张, 红牌 0 张
浙江队 - 王五 (7号): 黄牌 0 张, 红牌 1 张
浙江队 - 刘六 (9号): 黄牌 1 张, 红牌 0 张
江苏队 - 小明 (11号): 黄牌 1 张, 红牌 0 张
【比赛事件记录】
1. 江苏队 张三 黄牌
2. 江苏队 李四 黄牌
3. 浙江队 王五 红牌
4. 江苏队 小明 黄牌
5. 浙江队 刘六 黄牌
===== 红黄牌对比 =====
【黄牌数量对比】
江苏队 黄牌: 3
浙江队 黄牌: 1
→ 江苏队 黄牌更多
【红牌数量对比】
江苏队 红牌: 0
浙江队 红牌: 1
→ 浙江队 红牌更多
【总牌数对比】
江苏队 总牌数: 3
浙江队 总牌数: 2
→ 江苏队 红黄牌总数更多
【惩罚加权分对比】(黄牌1分,红牌2分)
江苏队 加权分: 3
浙江队 加权分: 3
→ 两队惩罚严重程度相同
【最终结论】
⚖️ 两队红黄牌数量持平!

主要功能说明

  1. 数据录入:支持手动输入比赛事件
  2. 多维度统计:可比较黄牌、红牌、总牌数和加权分
  3. 球员统计:记录每位球员的红黄牌情况
  4. 灵活比较:支持不同维度的比较
  5. 加权计算:红牌权重高于黄牌(红牌2分,黄牌1分)

这个程序可以根据您的需求灵活调整,比如添加联赛统计、赛季统计等功能。

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