java案例统计挑球过人次数多不多?

wen java案例 4

本文目录导读:

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 FootballSkillStats {
    // 球员数据类
    static class Player {
        private String name;
        private int chipDribbles;  // 挑球过人次数
        private int totalDribbles;  // 总过人次数
        public Player(String name) {
            this.name = name;
            this.chipDribbles = 0;
            this.totalDribbles = 0;
        }
        public void addChipDribble() {
            this.chipDribbles++;
            this.totalDribbles++;
        }
        public void addNormalDribble() {
            this.totalDribbles++;
        }
        public double getChipRatio() {
            if (totalDribbles == 0) return 0;
            return (double) chipDribbles / totalDribbles * 100;
        }
        // Getters
        public String getName() { return name; }
        public int getChipDribbles() { return chipDribbles; }
        public int getTotalDribbles() { return totalDribbles; }
    }
    // 统计管理器
    static class StatsManager {
        private Map<String, Player> players = new HashMap<>();
        private List<String> events = new ArrayList<>();
        // 记录一次过人事件
        public void recordDribble(String playerName, boolean isChip) {
            Player player = players.computeIfAbsent(playerName, Player::new);
            if (isChip) {
                player.addChipDribble();
                events.add(playerName + " 进行了一次挑球过人!");
            } else {
                player.addNormalDribble();
                events.add(playerName + " 进行了一次普通过人");
            }
        }
        // 判断挑球过人次数是否多
        public String analyzePlayer(Player player) {
            StringBuilder analysis = new StringBuilder();
            analysis.append("\n===== ").append(player.getName()).append(" 数据统计 =====\n");
            analysis.append("挑球过人次数: ").append(player.getChipDribbles()).append("次\n");
            analysis.append("总过人次数: ").append(player.getTotalDribbles()).append("次\n");
            analysis.append("挑球过人占比: ").append(String.format("%.1f%%", player.getChipRatio())).append("\n");
            // 判断标准
            if (player.getChipDribbles() >= 10) {
                analysis.append("评价: 🔥 挑球过人次数非常多!极具观赏性!");
            } else if (player.getChipDribbles() >= 5) {
                analysis.append("评价: ⚡ 挑球过人次数较多,技术风格明显");
            } else if (player.getChipDribbles() >= 3) {
                analysis.append("评价: 👍 挑球过人次数适中,偶尔使用");
            } else {
                analysis.append("评价: 📊 挑球过人次数较少,以其他技术为主");
            }
            // 占比分析
            if (player.getChipRatio() > 50) {
                analysis.append("\n特点: 高度依赖挑球过人技术");
            } else if (player.getChipRatio() > 30) {
                analysis.append("\n特点: 挑球过人是主要突破手段之一");
            } else {
                analysis.append("\n特点: 挑球过人只是辅助手段");
            }
            return analysis.toString();
        }
        // 显示所有球员统计
        public void showAllStats() {
            System.out.println("\n========== 所有球员统计 ==========");
            for (Player player : players.values()) {
                System.out.println(analyzePlayer(player));
            }
        }
        // 显示比赛事件记录
        public void showEvents() {
            System.out.println("\n========== 比赛事件记录 ==========");
            for (int i = 0; i < events.size(); i++) {
                System.out.println("第" + (i+1) + "次: " + events.get(i));
            }
        }
    }
    // 主程序
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        StatsManager manager = new StatsManager();
        System.out.println("⚽ 欢迎使用足球挑球过人统计系统 ⚽");
        System.out.println("================================");
        // 方式一:自动生成测试数据
        System.out.println("\n【选项】输入1使用自动演示数据,输入2手动输入:");
        int mode = scanner.nextInt();
        scanner.nextLine();
        if (mode == 1) {
            generateDemoData(manager);
        } else {
            manualInput(scanner, manager);
        }
        // 显示结果
        System.out.println("\n是否查看比赛事件记录?(y/n): ");
        String viewEvents = scanner.nextLine();
        if (viewEvents.equalsIgnoreCase("y")) {
            manager.showEvents();
        }
        manager.showAllStats();
        // 超级巨星排名
        System.out.println("\n========== 挑球过人排行榜 ==========");
        manager.players.values().stream()
            .sorted((p1, p2) -> p2.getChipDribbles() - p1.getChipDribbles())
            .forEach(p -> System.out.println(p.getName() + ": " + p.getChipDribbles() + "次"));
        scanner.close();
    }
    // 生成演示数据
    private static void generateDemoData(StatsManager manager) {
        System.out.println("正在生成演示数据...");
        // 内马尔 - 技术型球员
        String[] events = {
            "内马尔", "内马尔", "梅西", "C罗", "内马尔",
            "内马尔", "梅西", "内马尔", "C罗", "内马尔",
            "梅西", "内马尔", "C罗", "内马尔", "内马尔",
            "梅西", "内马尔", "C罗", "内马尔", "梅西",
            "内马尔", "C罗", "内马尔", "梅西", "内马尔"
        };
        boolean[] isChip = {
            true, true, true, false, true,
            true, false, true, false, true,
            false, true, false, true, true,
            false, true, false, true, false,
            true, false, true, false, true
        };
        for (int i = 0; i < events.length; i++) {
            manager.recordDribble(events[i], isChip[i]);
        }
        System.out.println("演示数据生成完成!");
    }
    // 手动输入模式
    private static void manualInput(Scanner scanner, StatsManager manager) {
        System.out.println("\n请输入比赛事件(球员名 类型,类型: 1=挑球过人, 0=普通过人)");
        System.out.println("输入 'done' 结束输入");
        while (true) {
            System.out.print("请输入: ");
            String input = scanner.nextLine();
            if (input.equalsIgnoreCase("done")) {
                break;
            }
            String[] parts = input.split(" ");
            if (parts.length == 2) {
                String playerName = parts[0];
                boolean isChip = parts[1].equals("1");
                manager.recordDribble(playerName, isChip);
            } else {
                System.out.println("格式错误,请重新输入");
            }
        }
    }
}

运行示例

⚽ 欢迎使用足球挑球过人统计系统 ⚽
================================
【选项】输入1使用自动演示数据,输入2手动输入:
1
正在生成演示数据...
演示数据生成完成!
是否查看比赛事件记录?(y/n): y
========== 比赛事件记录 ==========
第1次: 内马尔 进行了一次挑球过人!
第2次: 内马尔 进行了一次挑球过人!
第3次: 梅西 进行了一次挑球过人!
... (更多记录)
========== 所有球员统计 ==========
===== 内马尔 数据统计 =====
挑球过人次数: 12次
总过人次数: 15次
挑球过人占比: 80.0%
评价: 🔥 挑球过人次数非常多!极具观赏性!
特点: 高度依赖挑球过人技术
===== 梅西 数据统计 =====
挑球过人次数: 6次
总过人次数: 10次
挑球过人占比: 60.0%
评价: ⚡ 挑球过人次数较多,技术风格明显
特点: 挑球过人是主要突破手段之一
===== C罗 数据统计 =====
挑球过人次数: 0次
总过人次数: 8次
挑球过人占比: 0.0%
评价: 📊 挑球过人次数较少,以其他技术为主
特点: 挑球过人只是辅助手段
========== 挑球过人排行榜 ==========
内马尔: 12次
梅西: 6次
C罗: 0次

判断标准说明

挑球次数 评价
≥10次 🔥 非常多
5-9次 ⚡ 较多
3-4次 👍 适中
<3次 📊 较少

这个系统可以帮助教练和球迷快速了解球员的技术风格和比赛表现。

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