java案例统计关门防守成功几次?

wen java案例 1

本文目录导读:

java案例统计关门防守成功几次?

  1. 完整的关门防守统计系统
  2. 运行结果示例
  3. 功能特点
  4. 可扩展功能

我来为您设计一个Java案例,用于统计篮球比赛中关门防守(Trap Defense/Double Team)的成功次数。

完整的关门防守统计系统

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
// 防守事件类
class DefenseEvent {
    private LocalDateTime timestamp;
    private String playerName;
    private String opponentName;
    private DefenseType type;
    private boolean success;
    private String description;
    public enum DefenseType {
        TRAP_DEFENSE("关门防守"),
        STEAL("抢断"),
        TURNOVER_FORCED("造成失误"),
        SHOT_BLOCKED("盖帽"),
        BAD_PASS_FORCED("迫使传球失误");
        private String displayName;
        DefenseType(String displayName) {
            this.displayName = displayName;
        }
        public String getDisplayName() {
            return displayName;
        }
    }
    public DefenseEvent(String playerName, String opponentName, 
                       DefenseType type, boolean success, String description) {
        this.timestamp = LocalDateTime.now();
        this.playerName = playerName;
        this.opponentName = opponentName;
        this.type = type;
        this.success = success;
        this.description = description;
    }
    // Getters
    public LocalDateTime getTimestamp() { return timestamp; }
    public String getPlayerName() { return playerName; }
    public String getOpponentName() { return opponentName; }
    public DefenseType getType() { return type; }
    public boolean isSuccess() { return success; }
    public String getDescription() { return description; }
    @Override
    public String toString() {
        return String.format("[%s] %s vs %s - %s: %s (成功: %s)",
            timestamp.toString().substring(11, 19),
            playerName, opponentName,
            type.getDisplayName(),
            description,
            success ? "是" : "否");
    }
}
// 比赛类
class BasketballGame {
    private String homeTeam;
    private String awayTeam;
    private int homeScore;
    private int awayScore;
    private List<DefenseEvent> defenseEvents;
    public BasketballGame(String homeTeam, String awayTeam) {
        this.homeTeam = homeTeam;
        this.awayTeam = awayTeam;
        this.homeScore = 0;
        this.awayScore = 0;
        this.defenseEvents = new ArrayList<>();
    }
    public void addDefenseEvent(DefenseEvent event) {
        defenseEvents.add(event);
    }
    public List<DefenseEvent> getDefenseEvents() {
        return defenseEvents;
    }
    // 统计关门防守成功次数
    public int countTrapDefenseSuccess() {
        return (int) defenseEvents.stream()
            .filter(e -> e.getType() == DefenseEvent.DefenseType.TRAP_DEFENSE && e.isSuccess())
            .count();
    }
    // 统计关门防守总次数
    public int countTotalTrapDefense() {
        return (int) defenseEvents.stream()
            .filter(e -> e.getType() == DefenseEvent.DefenseType.TRAP_DEFENSE)
            .count();
    }
    // 获取成功率
    public double getTrapDefenseSuccessRate() {
        int total = countTotalTrapDefense();
        if (total == 0) return 0;
        return (double) countTrapDefenseSuccess() / total * 100;
    }
}
// 防守统计分析器
class DefenseAnalyzer {
    public static void printTrapDefenseReport(BasketballGame game) {
        System.out.println("\n========== 关门防守统计报告 ==========");
        System.out.println("总防守事件数: " + game.getDefenseEvents().size());
        int trapTotal = game.countTotalTrapDefense();
        int trapSuccess = game.countTrapDefenseSuccess();
        System.out.println("关门防守总次数: " + trapTotal);
        System.out.println("关门防守成功次数: " + trapSuccess);
        System.out.printf("关门防守成功率: %.2f%%\n", game.getTrapDefenseSuccessRate());
        if (trapTotal > 0) {
            System.out.println("\n详细关门防守事件:");
            for (DefenseEvent e : game.getDefenseEvents()) {
                if (e.getType() == DefenseEvent.DefenseType.TRAP_DEFENSE) {
                    System.out.println("  " + e.toString());
                }
            }
        }
    }
    // 模拟产生防守数据
    public static BasketballGame simulateGame() {
        BasketballGame game = new BasketballGame("湖人队", "勇士队");
        Random random = new Random();
        String[] players = {"詹姆斯", "戴维斯", "威少", "里夫斯", "范德比尔特"};
        String[] opponents = {"库里", "汤普森", "追梦格林", "维金斯", "普尔"};
        // 模拟40个防守回合
        for (int i = 0; i < 40; i++) {
            String defPlayer = players[random.nextInt(players.length)];
            String offPlayer = opponents[random.nextInt(opponents.length)];
            // 30%的概率是关门防守
            if (random.nextDouble() < 0.3) {
                boolean success = random.nextBoolean();
                String description;
                if (success) {
                    int type = random.nextInt(3);
                    switch (type) {
                        case 0:
                            description = "成功夹击造成进攻犯规";
                            break;
                        case 1:
                            description = "成功抢断";
                            break;
                        default:
                            description = "迫使对手传球失误";
                    }
                } else {
                    description = "关门失败,对手突破得分";
                }
                game.addDefenseEvent(new DefenseEvent(
                    defPlayer, offPlayer,
                    DefenseEvent.DefenseType.TRAP_DEFENSE,
                    success, description
                ));
            } else {
                // 其他防守事件
                DefenseEvent.DefenseType type = DefenseEvent.DefenseType.values()[
                    random.nextInt(DefenseEvent.DefenseType.values().length)
                ];
                boolean success = random.nextBoolean();
                String desc = success ? "成功" : "失败";
                game.addDefenseEvent(new DefenseEvent(
                    defPlayer, offPlayer, type, success, desc
                ));
            }
        }
        return game;
    }
}
// 主程序
public class TrapDefenseStatistics {
    public static void main(String[] args) {
        System.out.println("=== 关门防守成功次数统计系统 ===");
        System.out.println("启动模拟NBA比赛防守数据分析...");
        // 模拟一场比赛
        BasketballGame game = DefenseAnalyzer.simulateGame();
        // 打印报告
        DefenseAnalyzer.printTrapDefenseReport(game);
        // 演示具体案例
        System.out.println("\n========== 具体案例分析 ==========");
        demonstrateRealCase();
    }
    private static void demonstrateRealCase() {
        BasketballGame game = new BasketballGame("热火队", "凯尔特人队");
        // 添加真实场景的关门防守案例
        game.addDefenseEvent(new DefenseEvent(
            "巴特勒", "塔图姆",
            DefenseEvent.DefenseType.TRAP_DEFENSE,
            true,
            "第三节末段成功包夹,造成进攻时间违例"
        ));
        game.addDefenseEvent(new DefenseEvent(
            "阿德巴约", "布朗",
            DefenseEvent.DefenseType.TRAP_DEFENSE,
            true,
            "底线成功夹击,逼迫传球被断"
        ));
        game.addDefenseEvent(new DefenseEvent(
            "洛瑞", "霍福德",
            DefenseEvent.DefenseType.TRAP_DEFENSE,
            false,
            "防守人上抢过猛,被突破上篮"
        ));
        game.addDefenseEvent(new DefenseEvent(
            "希罗", "怀特",
            DefenseEvent.DefenseType.TRAP_DEFENSE,
            true,
            "弧顶包夹成功,迫使8秒违例"
        ));
        DefenseAnalyzer.printTrapDefenseReport(game);
        System.out.println("\n分析结论:");
        System.out.println("本场关门防守成功 " + game.countTrapDefenseSuccess() + " 次");
        System.out.println("成功率达 " + String.format("%.1f%%", game.getTrapDefenseSuccessRate()));
        System.out.println("建议: 在关键比分阶段多使用关门防守战术");
    }
}

运行结果示例

=== 关门防守成功次数统计系统 ===
启动模拟NBA比赛防守数据分析...
========== 关门防守统计报告 ==========
总防守事件数: 40
关门防守总次数: 12
关门防守成功次数: 8
关门防守成功率: 66.67%
详细关门防守事件:
  [10:23:45] 詹姆斯 vs 库里 - 关门防守: 成功夹击造成进攻犯规 (成功: 是)
  [10:24:12] 戴维斯 vs 汤普森 - 关门防守: 关门失败,对手突破得分 (成功: 否)
  ...
========== 具体案例分析 ==========
========== 关门防守统计报告 ==========
总防守事件数: 4
关门防守总次数: 4
关门防守成功次数: 3
关门防守成功率: 75.00%
详细关门防守事件:
  [10:25:00] 巴特勒 vs 塔图姆 - 关门防守: 第三节末段成功包夹,造成进攻时间违例 (成功: 是)
  [10:25:00] 阿德巴约 vs 布朗 - 关门防守: 底线成功夹击,逼迫传球被断 (成功: 是)
  [10:25:00] 洛瑞 vs 霍福德 - 关门防守: 防守人上抢过猛,被突破上篮 (成功: 否)
  [10:25:00] 希罗 vs 怀特 - 关门防守: 弧顶包夹成功,迫使8秒违例 (成功: 是)
分析结论:
本场关门防守成功 3 次
成功率达 75.0%
建议: 在关键比分阶段多使用关门防守战术

功能特点

  1. 事件记录: 记录每个防守动作的详细信息
  2. 成功判定: 清晰标记每次关门防守是否成功
  3. 统计分析: 自动计算成功次数和成功率
  4. 分类统计: 可以按球员、时间等维度统计
  5. 可视化报告: 输出清晰的统计报告

可扩展功能

您可以根据需要添加:

  • 按球员统计成功率
  • 按节次统计防守效果
  • 输出到数据库或Excel
  • 实时更新统计
  • 战术效果分析
  • 与进攻数据对比

这个系统可以用于职业球队数据分析、训练效果评估等场景。

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