本文目录导读:

我来为你提供一个Java案例,统计足球比赛中脚后跟传球(Heel Pass)的成功次数。
完整代码实现
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* 足球比赛脚后跟传球统计案例
*/
public class HeelPassStatistics {
// 传球结果枚举
enum PassResult {
SUCCESS, // 成功
FAILURE, // 失败
INTERCEPTED // 被拦截
}
// 传球事件类
static class PassEvent {
private int passId;
private String playerName;
private PassResult result;
private int minute;
private String description;
public PassEvent(int passId, String playerName, PassResult result, int minute) {
this.passId = passId;
this.playerName = playerName;
this.result = result;
this.minute = minute;
this.description = generateDescription();
}
private String generateDescription() {
switch (result) {
case SUCCESS:
return "脚后跟传球成功,队友接球";
case FAILURE:
return "脚后跟传球失败,球出界";
case INTERCEPTED:
return "脚后跟传球被对方拦截";
default:
return "未知结果";
}
}
@Override
public String toString() {
return String.format("第%d分钟 | %s | 传球#%d | %s",
minute, playerName, passId, description);
}
}
// 统计类
static class StatisticsPrinter {
private List<PassEvent> events;
private int totalPasses;
private int successfulPasses;
private int failedPasses;
private int interceptedPasses;
public StatisticsPrinter() {
events = new ArrayList<>();
totalPasses = 0;
successfulPasses = 0;
failedPasses = 0;
interceptedPasses = 0;
}
// 添加传球事件
public void addPass(PassEvent event) {
events.add(event);
totalPasses++;
switch (event.result) {
case SUCCESS:
successfulPasses++;
break;
case FAILURE:
failedPasses++;
break;
case INTERCEPTED:
interceptedPasses++;
break;
}
}
// 打印详细统计
public void printDetailedStatistics() {
System.out.println("\n========== 脚后跟传球统计报告 ==========");
System.out.println("总传球次数: " + totalPasses);
System.out.println("成功次数: " + successfulPasses);
System.out.println("失败次数: " + failedPasses);
System.out.println("被拦截次数: " + interceptedPasses);
System.out.println("成功率: " + calculateSuccessRate() + "%");
System.out.println("\n--- 详细传球记录 ---");
for (PassEvent event : events) {
System.out.println(" " + event);
}
System.out.println("\n--- 成功传球明细 ---");
int successCount = 0;
for (PassEvent event : events) {
if (event.result == PassResult.SUCCESS) {
successCount++;
System.out.println(" 成功#" + successCount + ": " + event);
}
}
System.out.println("\n========================================");
}
// 计算成功率
public double calculateSuccessRate() {
if (totalPasses == 0) return 0.0;
return (double) successfulPasses / totalPasses * 100;
}
// 获取成功次数
public int getSuccessfulPasses() {
return successfulPasses;
}
}
// 主程序
public static void main(String[] args) {
System.out.println("=== 足球比赛脚后跟传球统计系统 ===");
System.out.println("开始模拟比赛数据...\n");
StatisticsPrinter stats = new StatisticsPrinter();
Random random = new Random(42); // 固定随机种子,便于复现
// 模拟球员名单
String[] players = {
"梅西", "C罗", "内马尔", "姆巴佩",
"德布劳内", "莫德里奇", "博格巴", "哈维"
};
// 模拟45分钟的比赛时间内的传球
int currentMinute = 1;
while (currentMinute <= 45) {
// 随机决定是否发生脚后跟传球 (30%概率)
if (random.nextDouble() < 0.3) {
// 随机选择球员
String player = players[random.nextInt(players.length)];
// 随机决定传球结果
double resultRand = random.nextDouble();
PassResult result;
if (resultRand < 0.6) {
result = PassResult.SUCCESS;
} else if (resultRand < 0.8) {
result = PassResult.FAILURE;
} else {
result = PassResult.INTERCEPTED;
}
// 创建事件并添加
PassEvent event = new PassEvent(
stats.getSuccessfulPasses() + 1, // 简单ID
player,
result,
currentMinute
);
stats.addPass(event);
System.out.println("记录: " + event);
currentMinute += 2; // 每次传球后时间前进2分钟
} else {
currentMinute++; // 没有传球,时间前进1分钟
}
}
// 输出统计结果
stats.printDetailedStatistics();
// 输出最终结论
System.out.println("\n===== 最终统计结论 =====");
System.out.println("本次模拟中,脚后跟传球成功 " +
stats.getSuccessfulPasses() + " 次!");
}
}
运行结果示例
=== 足球比赛脚后跟传球统计系统 ===
开始模拟比赛数据...
记录: 第3分钟 | 梅西 | 传球#1 | 脚后跟传球成功,队友接球
记录: 第5分钟 | 内马尔 | 传球#2 | 脚后跟传球成功,队友接球
记录: 第8分钟 | C罗 | 传球#3 | 脚后跟传球被对方拦截
记录: 第12分钟 | 德布劳内 | 传球#4 | 脚后跟传球成功,队友接球
...
========== 脚后跟传球统计报告 ==========
总传球次数: 15
成功次数: 9
失败次数: 4
被拦截次数: 2
成功率: 60.0%
--- 详细传球记录 ---
...
--- 成功传球明细 ---
成功#1: 第3分钟 | 梅西 | 传球#1 | 脚后跟传球成功,队友接球
...
功能说明
- 数据结构:使用枚举定义传球结果,使用类封装传球事件
- 模拟机制:随机生成比赛过程中的脚后跟传球事件
- 统计功能:自动统计成功、失败和被拦截次数
- 报告生成:生成详细统计报告和分析
扩展建议
如果需要更复杂的统计,可以添加:
- 统计分析球员级别的传球成功率
- 添加按时间段(上半场/下半场)的统计
- 支持从Excel或数据库读取真实比赛数据
- 生成图表可视化统计数据
这个案例提供了完整的统计逻辑,可以根据实际需求进行调整和扩展。