本文目录导读:

我来为您设计一个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%
建议: 在关键比分阶段多使用关门防守战术
功能特点
- 事件记录: 记录每个防守动作的详细信息
- 成功判定: 清晰标记每次关门防守是否成功
- 统计分析: 自动计算成功次数和成功率
- 分类统计: 可以按球员、时间等维度统计
- 可视化报告: 输出清晰的统计报告
可扩展功能
您可以根据需要添加:
- 按球员统计成功率
- 按节次统计防守效果
- 输出到数据库或Excel
- 实时更新统计
- 战术效果分析
- 与进攻数据对比
这个系统可以用于职业球队数据分析、训练效果评估等场景。