统计脚后跟传球成功次数
下面我用一个完整的 Java 案例来演示如何统计足球比赛中"脚后跟传球"成功的次数。

需求分析
- 一次传球需要知道:传球方式(脚后跟 / 普通 / 头球等)和是否成功
- 我们要统计的是:方式为脚后跟 且 结果为成功 的次数
完整代码示例
import java.util.ArrayList;
import java.util.List;
// 传球记录类
class Pass {
private String playerName; // 传球球员
private String passType; // 传球方式:脚跟/普通/头球
private boolean success; // 是否成功
public Pass(String playerName, String passType, boolean success) {
this.playerName = playerName;
this.passType = passType;
this.success = success;
}
public String getPlayerName() { return playerName; }
public String getPassType() { return passType; }
public boolean isSuccess() { return success; }
@Override
public String toString() {
return playerName + " - " + passType + " - " + (success ? "成功" : "失败");
}
}
public class HeelPassStats {
public static void main(String[] args) {
// 1. 模拟一场比赛的传球数据
List<Pass> passes = new ArrayList<>();
passes.add(new Pass("梅西", "脚后跟", true));
passes.add(new Pass("梅西", "普通", true));
passes.add(new Pass("内马尔", "脚后跟", false));
passes.add(new Pass("苏亚雷斯","脚后跟", true));
passes.add(new Pass("梅西", "头球", false));
passes.add(new Pass("内马尔", "脚后跟", true));
passes.add(new Pass("苏亚雷斯","普通", true));
passes.add(new Pass("梅西", "脚后跟", true));
// 2. 统计脚后跟传球成功的次数
int heelPassSuccessCount = 0;
for (Pass pass : passes) {
if ("脚后跟".equals(pass.getPassType()) && pass.isSuccess()) {
heelPassSuccessCount++;
System.out.println("命中:" + pass);
}
}
// 3. 输出结果
System.out.println("==============================");
System.out.println("脚后跟传球成功次数:" + heelPassSuccessCount + " 次");
}
}
运行结果
命中:梅西 - 脚后跟 - 成功
命中:苏亚雷斯 - 脚后跟 - 成功
命中:内马尔 - 脚后跟 - 成功
命中:梅西 - 脚后跟 - 成功
==============================
脚后跟传球成功次数:4 次
代码扩展建议
用 Stream 流式写法(更简洁)
long count = passes.stream()
.filter(p -> "脚后跟".equals(p.getPassType()))
.filter(Pass::isSuccess)
.count();
System.out.println("脚后跟传球成功次数:" + count);
按球员分别统计
Map<String, Long> result = passes.stream()
.filter(p -> "脚后跟".equals(p.getPassType()) && p.isSuccess())
.collect(Collectors.groupingBy(Pass::getPlayerName, Collectors.counting()));
result.forEach((name, cnt) ->
System.out.println(name + " 脚后跟传球成功 " + cnt + " 次"));
加上成功率统计
long total = passes.stream().filter(p -> "脚后跟".equals(p.getPassType())).count();
long success = passes.stream().filter(p -> "脚后跟".equals(p.getPassType()) && p.isSuccess()).count();
double rate = total == 0 ? 0 : (double) success / total * 100;
System.out.printf("脚后跟传球成功率:%.1f%%%n", rate);
关键点小结
| 要点 | 说明 |
|---|---|
| 数据结构 | 用 Pass 类封装传球信息,List<Pass> 存全部记录 |
| 筛选条件 | 传球方式 == "脚后跟" 且 成功 == true |
| 计数方式 | 循环累加 或 Stream.filter().count() |
| 扩展方向 | 按球员分组、算成功率、按时间段筛选等 |
如果你有真实的数据源(CSV、JSON、数据库),我可以帮你改成从文件读取并进行更复杂的统计,需要的话告诉我数据格式即可。