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

wen java案例 5

我来帮你创建一个统计脚后跟传球成功次数的Java案例,这里提供一个完整的示例程序:

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;
        public Player(String name, int number) {
            this.name = name;
            this.number = number;
        }
        public String getName() {
            return name;
        }
        public int getNumber() {
            return number;
        }
    }
    // 传球事件类
    static class PassEvent {
        private Player passer;
        private Player receiver;
        private boolean successful;
        private boolean isHeelPass;
        private int minute;
        public PassEvent(Player passer, Player receiver, boolean successful, boolean isHeelPass, int minute) {
            this.passer = passer;
            this.receiver = receiver;
            this.successful = successful;
            this.isHeelPass = isHeelPass;
            this.minute = minute;
        }
        public Player getPasser() {
            return passer;
        }
        public Player getReceiver() {
            return receiver;
        }
        public boolean isSuccessful() {
            return successful;
        }
        public boolean isHeelPass() {
            return isHeelPass;
        }
        public int getMinute() {
            return minute;
        }
    }
    // 比赛数据统计类
    static class MatchStatistics {
        private List<PassEvent> events = new ArrayList<>();
        private int successfulHeelPasses = 0;
        private int totalHeelPasses = 0;
        public void addEvent(PassEvent event) {
            events.add(event);
            if (event.isHeelPass()) {
                totalHeelPasses++;
                if (event.isSuccessful()) {
                    successfulHeelPasses++;
                }
            }
        }
        public int getSuccessfulHeelPasses() {
            return successfulHeelPasses;
        }
        public int getTotalHeelPasses() {
            return totalHeelPasses;
        }
        public double getSuccessRate() {
            return (double) successfulHeelPasses / totalHeelPasses * 100;
        }
        // 按球员统计传球数据
        public void printPlayerStatistics() {
            System.out.println("\n===== 球员传球统计 =====");
            for (Player player : getPlayers()) {
                int successfulCount = 0;
                int totalCount = 0;
                for (PassEvent event : events) {
                    if (event.isHeelPass() && event.getPasser().equals(player)) {
                        totalCount++;
                        if (event.isSuccessful()) {
                            successfulCount++;
                        }
                    }
                }
                if (totalCount > 0) {
                    System.out.printf("%s(%d号):脚后跟传球%d次,成功%d次,成功率%.1f%%%n",
                            player.getName(), player.getNumber(), 
                            totalCount, successfulCount,
                            (double) successfulCount / totalCount * 100);
                }
            }
        }
        private List<Player> getPlayers() {
            List<Player> players = new ArrayList<>();
            for (PassEvent event : events) {
                if (!players.contains(event.getPasser())) {
                    players.add(event.getPasser());
                }
            }
            return players;
        }
    }
    // 模拟一场比赛
    public static void main(String[] args) {
        // 创建球员
        List<Player> players = new ArrayList<>();
        players.add(new Player("梅西", 10));
        players.add(new Player("C罗", 7));
        players.add(new Player("内马尔", 11));
        players.add(new Player("姆巴佩", 7));
        players.add(new Player("德布劳内", 17));
        players.add(new Player("莫德里奇", 10));
        players.add(new Player("凯恩", 9));
        players.add(new Player("哈兰德", 9));
        // 模拟比赛
        Random random = new Random();
        MatchStatistics stats = new MatchStatistics();
        System.out.println("===== 模拟足球比赛 - 脚后跟传球统计 =====");
        System.out.println("生成100次传球事件...\n");
        for (int i = 0; i < 100; i++) {
            // 随机选择传球者和接球者
            Player passer = players.get(random.nextInt(players.size()));
            Player receiver;
            // 确保传球者不等于接球者
            do {
                receiver = players.get(random.nextInt(players.size()));
            } while (passer.equals(receiver));
            // 随机决定是否是脚后跟传球(30%概率)
            boolean isHeelPass = random.nextDouble() < 0.3;
            // 随机决定传球是否成功(脚后跟传球成功率约70%)
            boolean successful;
            if (isHeelPass) {
                successful = random.nextDouble() < 0.7;
            } else {
                successful = random.nextDouble() < 0.85;
            }
            // 模拟比赛时间(0-90分钟)
            int minute = random.nextInt(91);
            // 创建传球事件并加入统计
            PassEvent event = new PassEvent(passer, receiver, successful, isHeelPass, minute);
            stats.addEvent(event);
            // 打印高亮的事件
            if (isHeelPass) {
                System.out.printf("[%d分钟] %s → %s 脚后跟传球 %s%n",
                        minute, passer.getName(), receiver.getName(),
                        successful ? "✅成功" : "❌失败");
            }
        }
        // 输出统计结果
        System.out.println("\n===== 统计数据汇总 =====");
        System.out.printf("脚后跟传球总次数:%d次%n", stats.getTotalHeelPasses());
        System.out.printf("脚后跟传球成功次数:%d次%n", stats.getSuccessfulHeelPasses());
        System.out.printf("脚后跟传球成功率:%.1f%%%n", stats.getSuccessRate());
        // 输出球员统计
        stats.printPlayerStatistics();
    }
}

程序运行示例输出:

===== 模拟足球比赛 - 脚后跟传球统计 =====
生成100次传球事件...
[45分钟] 姆巴佩 → 梅西 脚后跟传球 ✅成功
[12分钟] 德布劳内 → C罗 脚后跟传球 ✅成功
[67分钟] 梅西 → 内马尔 脚后跟传球 ❌失败
...
===== 统计数据汇总 =====
脚后跟传球总次数:32次
脚后跟传球成功次数:23次
脚后跟传球成功率:71.9%
===== 球员传球统计 =====
梅西(10号):脚后跟传球5次,成功4次,成功率80.0%
C罗(7号):脚后跟传球4次,成功3次,成功率75.0%
...

主要功能:

  1. 数据模型设计:包含球员(Player)和传球事件(PassEvent)两个类
  2. 随机模拟:模拟100次传球事件,其中约30%为脚后跟传球
  3. 成功率统计:脚后跟传球成功率约70%
  4. 多维度统计
    • 总传球次数统计
    • 成功次数统计
    • 成功率计算
    • 按球员分别统计

如果你需要处理实际的比赛数据,可以将 addEvent() 方法改为从外部数据源(数据库、文件等)读取真实数据,需要我帮你调整成处理实际数据的版本吗?

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