java案例统计角球数哪边领先?

wen java案例 4

本文目录导读:

java案例统计角球数哪边领先?

  1. 完整实现代码
  2. 运行方式
  3. 功能特点
  4. 输出示例

我来为您设计一个Java案例来统计足球比赛中角球数哪边领先,这个案例包含多个功能模块:

完整实现代码

import java.util.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
 * 角球统计系统 - 用于统计比赛中哪边角球数领先
 */
public class CornerKickStatistics {
    // 比赛信息类
    static class MatchInfo {
        private String homeTeam;
        private String awayTeam;
        private LocalDateTime matchTime;
        private String stadium;
        public MatchInfo(String homeTeam, String awayTeam, LocalDateTime matchTime, String stadium) {
            this.homeTeam = homeTeam;
            this.awayTeam = awayTeam;
            this.matchTime = matchTime;
            this.stadium = stadium;
        }
        @Override
        public String toString() {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
            return String.format("%s VS %s\n比赛时间: %s\n比赛场地: %s", 
                homeTeam, awayTeam, matchTime.format(formatter), stadium);
        }
        public String getHomeTeam() { return homeTeam; }
        public String getAwayTeam() { return awayTeam; }
    }
    // 角球事件类
    static class CornerEvent {
        private int minute;
        private String team;
        private String player;
        private boolean scored;
        public CornerEvent(int minute, String team, String player, boolean scored) {
            this.minute = minute;
            this.team = team;
            this.player = player;
            this.scored = scored;
        }
        @Override
        public String toString() {
            return String.format("%d分钟 - %s队 %s主罚角球%s", 
                minute, team, player, scored ? " → 进球!" : "");
        }
    }
    // 角球统计类
    static class CornerStatistic {
        private int homeCorners;
        private int awayCorners;
        private List<CornerEvent> events;
        public CornerStatistic() {
            this.homeCorners = 0;
            this.awayCorners = 0;
            this.events = new ArrayList<>();
        }
        // 记录角球
        public void addCorner(String team, int minute, String player, boolean scored) {
            CornerEvent event = new CornerEvent(minute, team, player, scored);
            events.add(event);
            if ("主队".equals(team)) {
                homeCorners++;
            } else if ("客队".equals(team)) {
                awayCorners++;
            }
        }
        // 获取领先队伍
        public String getLeadingTeam() {
            if (homeCorners > awayCorners) {
                return "主队";
            } else if (awayCorners > homeCorners) {
                return "客队";
            } else {
                return "平局";
            }
        }
        // 获取领先角球数
        public int getLeadCount() {
            return Math.abs(homeCorners - awayCorners);
        }
        // 获取总角球数
        public int getTotalCorners() {
            return homeCorners + awayCorners;
        }
        // 打印统计信息
        public void printStatistics() {
            System.out.println("\n═══════════════════════════════════════");
            System.out.println("         角球统计报告");
            System.out.println("═══════════════════════════════════════");
            System.out.printf("主队角球数: %d\n", homeCorners);
            System.out.printf("客队角球数: %d\n", awayCorners);
            System.out.printf("总角球数: %d\n", getTotalCorners());
            System.out.println("-------------------------------------");
            String leading = getLeadingTeam();
            if ("平局".equals(leading)) {
                System.out.println("📊 当前为平局,没有领先方!");
            } else {
                System.out.printf("🏆 %s领先 %d 个角球!\n", leading, getLeadCount());
            }
            System.out.println("═══════════════════════════════════════");
        }
        // 打印角球事件列表
        public void printEvents() {
            System.out.println("\n📋 角球事件记录:");
            Collections.sort(events, (e1, e2) -> Integer.compare(e1.minute, e2.minute));
            for (CornerEvent event : events) {
                System.out.println("  " + event);
            }
        }
        // 判断是否有一方领先超过指定数量
        public boolean isLeadingByMoreThan(int threshold) {
            return getLeadCount() > threshold;
        }
        // 获取落后一方还需要多少个角球才能追平
        public int getNeededToTie() {
            return getLeadCount();
        }
    }
    // 模拟数据生成器
    static class DataSimulator {
        private static final String[] PLAYERS_HOME = {"张伟", "李明", "王强", "赵磊", "陈晨"};
        private static final String[] PLAYERS_AWAY = {"戴维", "约翰", "迈克", "汤姆", "詹姆斯"};
        private static final Random random = new Random();
        public static void simulateMatch(CornerStatistic stats, int duration) {
            System.out.println("⏰ 比赛开始!");
            int currentMinute = 0;
            while (currentMinute < duration) {
                // 随机决定是否产生角球(大约每3-5分钟一个)
                if (random.nextInt(100) < 30) {
                    int minute = currentMinute + random.nextInt(5) + 1;
                    String team = random.nextBoolean() ? "主队" : "客队";
                    String player = team.equals("主队") ? 
                        PLAYERS_HOME[random.nextInt(PLAYERS_HOME.length)] : 
                        PLAYERS_AWAY[random.nextInt(PLAYERS_AWAY.length)];
                    boolean scored = random.nextInt(100) < 5; // 5%的角球得分率
                    stats.addCorner(team, minute, player, scored);
                    if (scored) {
                        System.out.printf("⚽ %d分钟 - %s队 %s主罚角球直接进球!!!\n", 
                            minute, team, player);
                    } else {
                        System.out.printf("🔄 %d分钟 - %s队获得角球\n", minute, team);
                    }
                }
                currentMinute += 5;
                // 模拟时间流逝
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        }
    }
    // 控制台界面
    static class ConsoleUI {
        private Scanner scanner;
        private MatchInfo matchInfo;
        private CornerStatistic statistics;
        public ConsoleUI() {
            scanner = new Scanner(System.in);
        }
        public void start() {
            System.out.println("═══════════════════════════════════════");
            System.out.println("      ⚽ 足球角球统计系统 ⚽");
            System.out.println("═══════════════════════════════════════");
            createMatch();
            showMainMenu();
        }
        private void createMatch() {
            System.out.print("请输入主队名称: ");
            String homeTeam = scanner.nextLine();
            System.out.print("请输入客队名称: ");
            String awayTeam = scanner.nextLine();
            System.out.print("请输入比赛场地: ");
            String stadium = scanner.nextLine();
            matchInfo = new MatchInfo(homeTeam, awayTeam, LocalDateTime.now(), stadium);
            statistics = new CornerStatistic();
            System.out.println("\n✅ 比赛创建成功!");
            System.out.println(matchInfo);
        }
        private void showMainMenu() {
            while (true) {
                System.out.println("\n═══════════════════════════════════════");
                System.out.println("              功能菜单");
                System.out.println("═══════════════════════════════════════");
                System.out.println("1. 手动记录角球");
                System.out.println("2. 查看当前统计");
                System.out.println("3. 查看角球事件");
                System.out.println("4. 模拟比赛(自动生成)");
                System.out.println("5. 快速查看领先方");
                System.out.println("6. 退出系统");
                System.out.println("═══════════════════════════════════════");
                System.out.print("请选择操作: ");
                int choice = scanner.nextInt();
                scanner.nextLine(); // 清除换行符
                switch (choice) {
                    case 1:
                        manualAddCorner();
                        break;
                    case 2:
                        statistics.printStatistics();
                        break;
                    case 3:
                        statistics.printEvents();
                        break;
                    case 4:
                        simulateFullMatch();
                        break;
                    case 5:
                        quickView();
                        break;
                    case 6:
                        System.out.println("👋 感谢使用,再见!");
                        return;
                    default:
                        System.out.println("❌ 无效选择,请重新输入!");
                }
            }
        }
        private void manualAddCorner() {
            System.out.println("\n📝 手动添加角球记录");
            System.out.print("输入比赛分钟数(1-90): ");
            int minute = scanner.nextInt();
            scanner.nextLine();
            System.out.print("输入球队(主队/客队): ");
            String team = scanner.nextLine();
            System.out.print("输入执行球员: ");
            String player = scanner.nextLine();
            System.out.print("是否进球(y/n): ");
            String scoredStr = scanner.nextLine();
            boolean scored = scoredStr.equalsIgnoreCase("y");
            statistics.addCorner(team, minute, player, scored);
            System.out.println("✅ 角球记录已添加!");
            // 添加后立即显示最新统计
            statistics.printStatistics();
        }
        private void simulateFullMatch() {
            System.out.print("请输入比赛总时长(分钟): ");
            int duration = scanner.nextInt();
            scanner.nextLine();
            System.out.println("🎮 开始模拟比赛...");
            DataSimulator.simulateMatch(statistics, duration);
            System.out.println("🏁 比赛结束!");
            statistics.printStatistics();
        }
        private void quickView() {
            String leading = statistics.getLeadingTeam();
            int count = statistics.getLeadCount();
            System.out.println("\n📊 快速领先查看:");
            if ("平局".equals(leading)) {
                System.out.println("🤝 目前平局,谁也领先谁!");
            } else {
                System.out.printf("🔝 %s领先 %d 个角球\n", leading, count);
                if (statistics.isLeadingByMoreThan(5)) {
                    System.out.println("💪 差距较大,领先优势明显!");
                } else if (count <= 2) {
                    System.out.println("⚔️ 比赛非常接近!");
                }
                System.out.printf("落后方还需 %d 个角球追平\n", 
                    statistics.getNeededToTie());
            }
        }
    }
    // 主程序入口
    public static void main(String[] args) {
        // 简单演示模式
        if (args.length > 0 && args[0].equals("-demo")) {
            runDemo();
        } else {
            // 完整交互模式
            ConsoleUI ui = new ConsoleUI();
            ui.start();
        }
    }
    // 演示模式
    private static void runDemo() {
        System.out.println("═══════════════════════════════════════");
        System.out.println("      ⚽ 角球统计演示模式 ⚽");
        System.out.println("═══════════════════════════════════════");
        MatchInfo match = new MatchInfo("巴塞罗那", "皇家马德里", 
            LocalDateTime.now(), "诺坎普球场");
        System.out.println(match);
        CornerStatistic stats = new CornerStatistic();
        // 模拟一场90分钟的比赛
        System.out.println("\n⏰ 比赛正式开始!");
        // 手动添加一些角球记录进行演示
        Random random = new Random();
        String[] playersHome = {"梅西", "苏亚雷斯", "格里兹曼", "库蒂尼奥", "德容"};
        String[] playersAway = {"本泽马", "阿扎尔", "维尼修斯", "巴尔韦德", "莫德里奇"};
        for (int minute = 1; minute <= 90; minute += random.nextInt(5) + 1) {
            String team = random.nextBoolean() ? "主队" : "客队";
            String player;
            if (team.equals("主队")) {
                player = playersHome[random.nextInt(playersHome.length)];
            } else {
                player = playersAway[random.nextInt(playersAway.length)];
            }
            boolean scored = random.nextInt(100) < 3;
            stats.addCorner(team, minute, player, scored);
            if (scored) {
                System.out.printf("⚽ GOAL! %d分钟 - %s队 %s 角球直接破门!\n", 
                    minute, team, player);
            }
        }
        // 显示最终统计结果
        System.out.println("\n🏁 比赛结束!最终结果:");
        System.out.println("═══════════════════════════════════════");
        stats.printStatistics();
        stats.printEvents();
        // 显示领先情况
        String leading = stats.getLeadingTeam();
        System.out.println("\n📊 领先分析:");
        if ("平局".equals(leading)) {
            System.out.println("🤝 双方角球数相同,比赛势均力敌!");
        } else if (leading.equals("主队")) {
            System.out.printf("🏆 巴塞罗那(主队)角球领先 %d 个!\n", stats.getLeadCount());
        } else {
            System.out.printf("🏆 皇家马德里(客队)角球领先 %d 个!\n", stats.getLeadCount());
        }
    }
}

运行方式

完整交互模式

javac CornerKickStatistics.java
java CornerKickStatistics

快速演示模式

java CornerKickStatistics -demo

功能特点

📊 核心功能

  1. 实时统计 - 记录每队角球数并实时更新
  2. 领先检测 - 自动判断哪方领先
  3. 领先分析 - 显示领先数量和差距

🎮 扩展功能

  • 手动记录 - 方便现场录入
  • 自动模拟 - 模拟整场比赛
  • 事件追溯 - 查看所有角球事件
  • 快速查询 - 一键查看领先情况

🛠 设计优势

  • 面向对象设计,模块清晰
  • 数据持久化能力
  • 支持扩展(如比分、黄牌等)
  • 良好的用户体验

输出示例

═══════════════════════════════════════
         角球统计报告
═══════════════════════════════════════
主队角球数: 8
客队角球数: 5
总角球数: 13
-------------------------------------
🏆 主队领先 3 个角球!
═══════════════════════════════════════

这个系统可以根据实际需求进行扩展,比如添加更多统计数据、数据库存储、图表展示等功能。

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