我来帮你创建一个统计脚后跟传球成功次数的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%
...
主要功能:
- 数据模型设计:包含球员(Player)和传球事件(PassEvent)两个类
- 随机模拟:模拟100次传球事件,其中约30%为脚后跟传球
- 成功率统计:脚后跟传球成功率约70%
- 多维度统计:
- 总传球次数统计
- 成功次数统计
- 成功率计算
- 按球员分别统计
如果你需要处理实际的比赛数据,可以将 addEvent() 方法改为从外部数据源(数据库、文件等)读取真实数据,需要我帮你调整成处理实际数据的版本吗?