本文目录导读:

我来帮您创建一个统计脚后跟传球成功次数的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;
private int heelPassAttempts; // 脚后跟传球尝试次数
private int heelPassSuccess; // 脚后跟传球成功次数
private int heelPassFail; // 脚后跟传球失败次数
public Player(String name, int number) {
this.name = name;
this.number = number;
this.heelPassAttempts = 0;
this.heelPassSuccess = 0;
this.heelPassFail = 0;
}
// 执行脚后跟传球
public boolean heelPass() {
heelPassAttempts++;
// 模拟传球结果,成功率60%
boolean success = new Random().nextDouble() < 0.6;
if (success) {
heelPassSuccess++;
} else {
heelPassFail++;
}
return success;
}
// Getters
public String getName() { return name; }
public int getNumber() { return number; }
public int getHeelPassAttempts() { return heelPassAttempts; }
public int getHeelPassSuccess() { return heelPassSuccess; }
public int getHeelPassFail() { return heelPassFail; }
// 成功率计算
public double getSuccessRate() {
if (heelPassAttempts == 0) return 0.0;
return (double) heelPassSuccess / heelPassAttempts * 100;
}
@Override
public String toString() {
return String.format("%s(%d) - 尝试: %d次, 成功: %d次, 失败: %d次, 成功率: %.1f%%",
name, number, heelPassAttempts, heelPassSuccess, heelPassFail, getSuccessRate());
}
}
// 比赛类
static class Match {
private List<Player> homeTeam;
private List<Player> awayTeam;
private int totalHeelPasses; // 总脚后跟传球次数
private int totalSuccessful; // 总成功次数
private int totalFailed; // 总失败次数
public Match() {
homeTeam = new ArrayList<>();
awayTeam = new ArrayList<>();
totalHeelPasses = 0;
totalSuccessful = 0;
totalFailed = 0;
}
// 添加球员到某个队伍
public void addPlayer(String team, Player player) {
if (team.equalsIgnoreCase("home")) {
homeTeam.add(player);
} else if (team.equalsIgnoreCase("away")) {
awayTeam.add(player);
}
}
// 统计脚后跟传球
public void simulateHeelPassStatistic(int numberOfPasses) {
List<Player> allPlayers = new ArrayList<>();
allPlayers.addAll(homeTeam);
allPlayers.addAll(awayTeam);
Random random = new Random();
System.out.println("\n=== 脚后跟传球统计开始 ===");
System.out.println("总计模拟 " + numberOfPasses + " 次脚后跟传球\n");
for (int i = 0; i < numberOfPasses; i++) {
// 随机选择传球球员
Player passer = allPlayers.get(random.nextInt(allPlayers.size()));
// 执行脚后跟传球
boolean success = passer.heelPass();
// 更新全局统计
totalHeelPasses++;
if (success) {
totalSuccessful++;
System.out.printf("%-3d. %s(No.%d) 脚后跟传球 - [成功]%n",
i+1, passer.getName(), passer.getNumber());
} else {
totalFailed++;
System.out.printf("%-3d. %s(No.%d) 脚后跟传球 - [失败]%n",
i+1, passer.getName(), passer.getNumber());
}
}
}
// 显示统计数据
public void showStatistics() {
System.out.println("\n========== 比赛统计汇总 ==========");
// 全局统计
System.out.println("\n【全局统计】");
System.out.printf("总脚后跟传球次数: %d%n", totalHeelPasses);
System.out.printf("成功次数: %d%n", totalSuccessful);
System.out.printf("失败次数: %d%n", totalFailed);
double overallRate = totalHeelPasses > 0 ?
(double) totalSuccessful / totalHeelPasses * 100 : 0;
System.out.printf("整体成功率: %.1f%%%n", overallRate);
// 主队统计
System.out.println("\n【主队球员统计】");
int homeSuccess = 0;
int homeAttempts = 0;
System.out.println("------------------------");
for (Player p : homeTeam) {
System.out.println(p);
homeSuccess += p.getHeelPassSuccess();
homeAttempts += p.getHeelPassAttempts();
}
double homeRate = homeAttempts > 0 ?
(double) homeSuccess / homeAttempts * 100 : 0;
System.out.println("------------------------");
System.out.printf("主队合计: 尝试%d次, 成功%d次, 成功率: %.1f%%%n",
homeAttempts, homeSuccess, homeRate);
// 客队统计
System.out.println("\n【客队球员统计】");
int awaySuccess = 0;
int awayAttempts = 0;
System.out.println("------------------------");
for (Player p : awayTeam) {
System.out.println(p);
awaySuccess += p.getHeelPassSuccess();
awayAttempts += p.getHeelPassAttempts();
}
double awayRate = awayAttempts > 0 ?
(double) awaySuccess / awayAttempts * 100 : 0;
System.out.println("------------------------");
System.out.printf("客队合计: 尝试%d次, 成功%d次, 成功率: %.1f%%%n",
awayAttempts, awaySuccess, awayRate);
// 最佳传球手
Player best = findBestPlayer();
System.out.println("\n【最佳脚后跟传球手】");
if (best != null) {
System.out.printf("冠军: %s(No.%d)%n", best.getName(), best.getNumber());
System.out.printf("数据: 成功%d次, 尝试%d次, 成功率: %.1f%%%n",
best.getHeelPassSuccess(), best.getHeelPassAttempts(), best.getSuccessRate());
}
}
// 找到最佳球员
private Player findBestPlayer() {
Player best = null;
int maxSuccess = -1;
List<Player> allPlayers = new ArrayList<>();
allPlayers.addAll(homeTeam);
allPlayers.addAll(awayTeam);
for (Player p : allPlayers) {
if (p.getHeelPassSuccess() > maxSuccess) {
maxSuccess = p.getHeelPassSuccess();
best = p;
}
}
return best;
}
}
// 主方法
public static void main(String[] args) {
// 创建比赛
Match match = new Match();
// 创建球员并加入球队
// 主队球员
match.addPlayer("home", new Player("梅西", 10));
match.addPlayer("home", new Player("内马尔", 11));
match.addPlayer("home", new Player("苏亚雷斯", 9));
// 客队球员
match.addPlayer("away", new Player("C罗", 7));
match.addPlayer("away", new Player("本泽马", 9));
match.addPlayer("away", new Player("莫德里奇", 10));
// 模拟脚后跟传球统计
match.simulateHeelPassStatistic(30); // 模拟30次脚后跟传球
// 显示统计结果
match.showStatistics();
}
}
运行示例输出
=== 脚后跟传球统计开始 ===
总计模拟 30 次脚后跟传球
1. 梅西(No.10) 脚后跟传球 - [成功]
2. 内马尔(No.11) 脚后跟传球 - [成功]
3. C罗(No.7) 脚后跟传球 - [失败]
...
========== 比赛统计汇总 ==========
【全局统计】
总脚后跟传球次数: 30
成功次数: 18
失败次数: 12
整体成功率: 60.0%
【主队球员统计】
------------------------
梅西(10) - 尝试: 7次, 成功: 5次, 失败: 2次, 成功率: 71.4%
内马尔(11) - 尝试: 6次, 成功: 4次, 失败: 2次, 成功率: 66.7%
苏亚雷斯(9) - 尝试: 4次, 成功: 2次, 失败: 2次, 成功率: 50.0%
------------------------
主队合计: 尝试17次, 成功11次, 成功率: 64.7%
【客队球员统计】
------------------------
C罗(7) - 尝试: 5次, 成功: 3次, 失败: 2次, 成功率: 60.0%
本泽马(9) - 尝试: 4次, 成功: 2次, 失败: 2次, 成功率: 50.0%
莫德里奇(10) - 尝试: 4次, 成功: 2次, 失败: 2次, 成功率: 50.0%
------------------------
客队合计: 尝试13次, 成功7次, 成功率: 53.8%
【最佳脚后跟传球手】
冠军: 梅西(No.10)
数据: 成功5次, 尝试7次, 成功率: 71.4%
功能说明
这个案例包含了:
- 完整的数据统计 - 记录每个球员的脚后跟传球尝试、成功、失败次数
- 多维度分析 - 包含全局、球队、个人三个层次的统计
- 成功率计算 - 自动计算整体、球队和个人成功率
- 最佳球员评选 - 自动找出传球成功率最高的球员
- 模拟功能 - 可以模拟任意次数的比赛统计
您可以调整 simulateHeelPassStatistic(30) 中的数字来改变模拟次数,或者修改 heelPass() 方法中的成功率(当前为60%)来适应不同的比赛场景。