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

wen java案例 2

足球红黄牌统计案例(Java)

下面是一个完整的 Java 案例:统计一场比赛中哪队红黄牌更多。

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

需求说明

  • 输入两队的红黄牌记录
  • 分别统计红牌、黄牌数量
  • 按"红牌优先,黄牌次之"比较哪队罚牌更严重(更多)
  • 输出结果

说明:足球规则中红牌 = 直接罚下,黄牌两次变红,为公平比较可用罚分制:红牌 3 分、黄牌 1 分,这里两种方式都实现。

完整代码

import java.util.*;
public class CardStatistics {
    // 罚牌数据结构
    static class TeamCards {
        String teamName;
        int red;        // 红牌数
        int yellow;     // 黄牌数
        TeamCards(String name) {
            this.teamName = name;
        }
        // 罚分:红牌3分,黄牌1分
        int penalty() {
            return red * 3 + yellow;
        }
        @Override
        public String toString() {
            return teamName + " → 红牌:" + red + " 张,黄牌:" + yellow + " 张,罚分:" + penalty();
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入主队名称:");
        String homeName = sc.nextLine();
        System.out.print("请输入客队名称:");
        String awayName = sc.nextLine();
        TeamCards home = new TeamCards(homeName);
        TeamCards away = new TeamCards(awayName);
        // 输入主队红黄牌
        System.out.print("输入 " + homeName + " 红牌数:");
        home.red = sc.nextInt();
        System.out.print("输入 " + homeName + " 黄牌数:");
        home.yellow = sc.nextInt();
        // 输入客队红黄牌
        System.out.print("输入 " + awayName + " 红牌数:");
        away.red = sc.nextInt();
        System.out.print("输入 " + awayName + " 黄牌数:");
        away.yellow = sc.nextInt();
        System.out.println("\n========== 统计结果 ==========");
        System.out.println(home);
        System.out.println(away);
        System.out.println("------------------------------");
        compare(home, away);
        sc.close();
    }
    // 比较哪队罚牌更多
    static void compare(TeamCards a, TeamCards b) {
        // 优先比红牌,再比黄牌(更符合足球直觉)
        if (a.red != b.red) {
            System.out.println("红牌更多的队:" + (a.red > b.red ? a.teamName : b.teamName));
        } else if (a.yellow != b.yellow) {
            System.out.println("红牌相同,黄牌更多的队:" + (a.yellow > b.yellow ? a.teamName : b.teamName));
        } else {
            System.out.println("两队红黄牌数量完全相同!");
        }
        // 附加:罚分比较
        if (a.penalty() > b.penalty()) {
            System.out.println("按罚分制,罚牌更严重的是:" + a.teamName + "(" + a.penalty() + " 分)");
        } else if (a.penalty() < b.penalty()) {
            System.out.println("按罚分制,罚牌更严重的是:" + b.teamName + "(" + b.penalty() + " 分)");
        } else {
            System.out.println("按罚分制,两队罚牌程度相同(均为 " + a.penalty() + " 分)");
        }
    }
}

运行示例

请输入主队名称:广州队
请输入客队名称:北京队
输入 广州队 红牌数:1
输入 广州队 黄牌数:3
输入 北京队 红牌数:0
输入 北京队 黄牌数:5
========== 统计结果 ==========
广州队 → 红牌:1 张,黄牌:3 张,罚分:6
北京队 → 红牌:0 张,黄牌:5 张,罚分:5
------------------------------
红牌更多的队:广州队
按罚分制,罚牌更严重的是:广州队(6 分)

关键点解析

要点 说明
数据封装 用 TeamCards 类封装队名、红牌、黄牌,便于扩展
比较策略 先比红牌→再比黄牌→最后相同,符合"红牌更严重"的足球直觉
罚分制 红 3 分 / 黄 1 分,能反映"两张黄牌 = 一张红牌"的规则直觉
可扩展 可轻松接入数据库/文件读取比赛事件流

进阶:从事件流统计(更贴近真实场景)

如果数据是从比赛事件记录逐条读取(如 "黄牌,张三,广州队"),可用集合统计:

static TeamCards countFromEvents(String teamName, List<String[]> events) {
    TeamCards tc = new TeamCards(teamName);
    for (String[] e : events) {
        if (!e[2].equals(teamName)) continue;   // e[2] 是队伍
        if (e[0].equals("红牌")) tc.red++;
        else if (e[0].equals("黄牌")) tc.yellow++;
    }
    return tc;
}

这样就能对整场比赛所有事件一次性统计出哪队红黄牌更多。


如果你需要从文件读取、用 Map 统计、或图形界面版本,告诉我具体场景,我可以继续补充完整代码。

上一篇java案例认为俱乐部高层变动影响大吗?

下一篇当前分类已是最新一篇

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

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝