java案例统计脚后跟传球成功几次?

wen java案例 2

统计脚后跟传球成功次数

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

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、数据库),我可以帮你改成从文件读取并进行更复杂的统计,需要的话告诉我数据格式即可。

抱歉,评论功能暂时关闭!