java案例统计脚后跟传球成功几次?

wen java案例 19

本文目录导读:

java案例统计脚后跟传球成功几次?

  1. 完整案例代码
  2. 运行示例输出
  3. 功能说明

我来帮您创建一个统计脚后跟传球成功次数的Java案例。

完整案例代码

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
 * 足球比赛脚后跟传球统计器
 */
public class HeelPassStatistic {
    // 球员类
    static class Player {
        private String name;
        private int number;
        private int heelPassAttempts;  // 脚后跟传球尝试次数
        private int heelPassSuccess;   // 脚后跟传球成功次数
        private int heelPassFail;      // 脚后跟传球失败次数
        public Player(String name, int number) {
            this.name = name;
            this.number = number;
            this.heelPassAttempts = 0;
            this.heelPassSuccess = 0;
            this.heelPassFail = 0;
        }
        // 执行脚后跟传球
        public boolean heelPass() {
            heelPassAttempts++;
            // 模拟传球结果,成功率60%
            boolean success = new Random().nextDouble() < 0.6;
            if (success) {
                heelPassSuccess++;
            } else {
                heelPassFail++;
            }
            return success;
        }
        // Getters
        public String getName() { return name; }
        public int getNumber() { return number; }
        public int getHeelPassAttempts() { return heelPassAttempts; }
        public int getHeelPassSuccess() { return heelPassSuccess; }
        public int getHeelPassFail() { return heelPassFail; }
        // 成功率计算
        public double getSuccessRate() {
            if (heelPassAttempts == 0) return 0.0;
            return (double) heelPassSuccess / heelPassAttempts * 100;
        }
        @Override
        public String toString() {
            return String.format("%s(%d) - 尝试: %d次, 成功: %d次, 失败: %d次, 成功率: %.1f%%", 
                name, number, heelPassAttempts, heelPassSuccess, heelPassFail, getSuccessRate());
        }
    }
    // 比赛类
    static class Match {
        private List<Player> homeTeam;
        private List<Player> awayTeam;
        private int totalHeelPasses;     // 总脚后跟传球次数
        private int totalSuccessful;     // 总成功次数
        private int totalFailed;         // 总失败次数
        public Match() {
            homeTeam = new ArrayList<>();
            awayTeam = new ArrayList<>();
            totalHeelPasses = 0;
            totalSuccessful = 0;
            totalFailed = 0;
        }
        // 添加球员到某个队伍
        public void addPlayer(String team, Player player) {
            if (team.equalsIgnoreCase("home")) {
                homeTeam.add(player);
            } else if (team.equalsIgnoreCase("away")) {
                awayTeam.add(player);
            }
        }
        // 统计脚后跟传球
        public void simulateHeelPassStatistic(int numberOfPasses) {
            List<Player> allPlayers = new ArrayList<>();
            allPlayers.addAll(homeTeam);
            allPlayers.addAll(awayTeam);
            Random random = new Random();
            System.out.println("\n=== 脚后跟传球统计开始 ===");
            System.out.println("总计模拟 " + numberOfPasses + " 次脚后跟传球\n");
            for (int i = 0; i < numberOfPasses; i++) {
                // 随机选择传球球员
                Player passer = allPlayers.get(random.nextInt(allPlayers.size()));
                // 执行脚后跟传球
                boolean success = passer.heelPass();
                // 更新全局统计
                totalHeelPasses++;
                if (success) {
                    totalSuccessful++;
                    System.out.printf("%-3d. %s(No.%d) 脚后跟传球 - [成功]%n", 
                        i+1, passer.getName(), passer.getNumber());
                } else {
                    totalFailed++;
                    System.out.printf("%-3d. %s(No.%d) 脚后跟传球 - [失败]%n", 
                        i+1, passer.getName(), passer.getNumber());
                }
            }
        }
        // 显示统计数据
        public void showStatistics() {
            System.out.println("\n========== 比赛统计汇总 ==========");
            // 全局统计
            System.out.println("\n【全局统计】");
            System.out.printf("总脚后跟传球次数: %d%n", totalHeelPasses);
            System.out.printf("成功次数: %d%n", totalSuccessful);
            System.out.printf("失败次数: %d%n", totalFailed);
            double overallRate = totalHeelPasses > 0 ? 
                (double) totalSuccessful / totalHeelPasses * 100 : 0;
            System.out.printf("整体成功率: %.1f%%%n", overallRate);
            // 主队统计
            System.out.println("\n【主队球员统计】");
            int homeSuccess = 0;
            int homeAttempts = 0;
            System.out.println("------------------------");
            for (Player p : homeTeam) {
                System.out.println(p);
                homeSuccess += p.getHeelPassSuccess();
                homeAttempts += p.getHeelPassAttempts();
            }
            double homeRate = homeAttempts > 0 ? 
                (double) homeSuccess / homeAttempts * 100 : 0;
            System.out.println("------------------------");
            System.out.printf("主队合计: 尝试%d次, 成功%d次, 成功率: %.1f%%%n", 
                homeAttempts, homeSuccess, homeRate);
            // 客队统计
            System.out.println("\n【客队球员统计】");
            int awaySuccess = 0;
            int awayAttempts = 0;
            System.out.println("------------------------");
            for (Player p : awayTeam) {
                System.out.println(p);
                awaySuccess += p.getHeelPassSuccess();
                awayAttempts += p.getHeelPassAttempts();
            }
            double awayRate = awayAttempts > 0 ? 
                (double) awaySuccess / awayAttempts * 100 : 0;
            System.out.println("------------------------");
            System.out.printf("客队合计: 尝试%d次, 成功%d次, 成功率: %.1f%%%n", 
                awayAttempts, awaySuccess, awayRate);
            // 最佳传球手
            Player best = findBestPlayer();
            System.out.println("\n【最佳脚后跟传球手】");
            if (best != null) {
                System.out.printf("冠军: %s(No.%d)%n", best.getName(), best.getNumber());
                System.out.printf("数据: 成功%d次, 尝试%d次, 成功率: %.1f%%%n", 
                    best.getHeelPassSuccess(), best.getHeelPassAttempts(), best.getSuccessRate());
            }
        }
        // 找到最佳球员
        private Player findBestPlayer() {
            Player best = null;
            int maxSuccess = -1;
            List<Player> allPlayers = new ArrayList<>();
            allPlayers.addAll(homeTeam);
            allPlayers.addAll(awayTeam);
            for (Player p : allPlayers) {
                if (p.getHeelPassSuccess() > maxSuccess) {
                    maxSuccess = p.getHeelPassSuccess();
                    best = p;
                }
            }
            return best;
        }
    }
    // 主方法
    public static void main(String[] args) {
        // 创建比赛
        Match match = new Match();
        // 创建球员并加入球队
        // 主队球员
        match.addPlayer("home", new Player("梅西", 10));
        match.addPlayer("home", new Player("内马尔", 11));
        match.addPlayer("home", new Player("苏亚雷斯", 9));
        // 客队球员
        match.addPlayer("away", new Player("C罗", 7));
        match.addPlayer("away", new Player("本泽马", 9));
        match.addPlayer("away", new Player("莫德里奇", 10));
        // 模拟脚后跟传球统计
        match.simulateHeelPassStatistic(30);  // 模拟30次脚后跟传球
        // 显示统计结果
        match.showStatistics();
    }
}

运行示例输出

=== 脚后跟传球统计开始 ===
总计模拟 30 次脚后跟传球
1.  梅西(No.10) 脚后跟传球 - [成功]
2.  内马尔(No.11) 脚后跟传球 - [成功]
3.  C罗(No.7) 脚后跟传球 - [失败]
...
========== 比赛统计汇总 ==========
【全局统计】
总脚后跟传球次数: 30
成功次数: 18
失败次数: 12
整体成功率: 60.0%
【主队球员统计】
------------------------
梅西(10) - 尝试: 7次, 成功: 5次, 失败: 2次, 成功率: 71.4%
内马尔(11) - 尝试: 6次, 成功: 4次, 失败: 2次, 成功率: 66.7%
苏亚雷斯(9) - 尝试: 4次, 成功: 2次, 失败: 2次, 成功率: 50.0%
------------------------
主队合计: 尝试17次, 成功11次, 成功率: 64.7%
【客队球员统计】
------------------------
C罗(7) - 尝试: 5次, 成功: 3次, 失败: 2次, 成功率: 60.0%
本泽马(9) - 尝试: 4次, 成功: 2次, 失败: 2次, 成功率: 50.0%
莫德里奇(10) - 尝试: 4次, 成功: 2次, 失败: 2次, 成功率: 50.0%
------------------------
客队合计: 尝试13次, 成功7次, 成功率: 53.8%
【最佳脚后跟传球手】
冠军: 梅西(No.10)
数据: 成功5次, 尝试7次, 成功率: 71.4%

功能说明

这个案例包含了:

  1. 完整的数据统计 - 记录每个球员的脚后跟传球尝试、成功、失败次数
  2. 多维度分析 - 包含全局、球队、个人三个层次的统计
  3. 成功率计算 - 自动计算整体、球队和个人成功率
  4. 最佳球员评选 - 自动找出传球成功率最高的球员
  5. 模拟功能 - 可以模拟任意次数的比赛统计

您可以调整 simulateHeelPassStatistic(30) 中的数字来改变模拟次数,或者修改 heelPass() 方法中的成功率(当前为60%)来适应不同的比赛场景。

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