java案例统计传球成功率哪队更高?

wen java案例 2

Java案例:统计传球成功率哪队更高

下面是一个完整的Java案例,模拟统计两支球队的传球成功率并比较哪队更高。

java案例统计传球成功率哪队更高?

完整代码

import java.util.*;
public class PassSuccessRate {
    // 球队类
    static class Team {
        String name;
        int totalPasses;      // 总传球次数
        int successPasses;    // 成功传球次数
        public Team(String name) {
            this.name = name;
        }
        // 添加一次传球记录
        public void addPass(boolean success) {
            totalPasses++;
            if (success) successPasses++;
        }
        // 计算成功率
        public double getSuccessRate() {
            return totalPasses == 0 ? 0 : (double) successPasses / totalPasses * 100;
        }
        @Override
        public String toString() {
            return String.format("%s: 总传球=%d, 成功=%d, 成功率=%.2f%%",
                    name, totalPasses, successPasses, getSuccessRate());
        }
    }
    public static void main(String[] args) {
        // 1. 创建两支球队
        Team teamA = new Team("A队");
        Team teamB = new Team("B队");
        // 2. 模拟传球数据(true=成功,false=失败)
        // A队:25次传球,20次成功
        boolean[] passesA = {
                true, true, false, true, true,
                true, false, true, true, true,
                true, true, false, true, true,
                true, true, true, false, true,
                true, false, true, true, true
        };
        // B队:22次传球,15次成功
        boolean[] passesB = {
                true, false, true, true, false,
                true, true, false, true, true,
                false, true, true, false, true,
                true, false, true, true, false,
                true, true
        };
        // 3. 统计传球数据
        for (boolean p : passesA) teamA.addPass(p);
        for (boolean p : passesB) teamB.addPass(p);
        // 4. 输出结果
        System.out.println("===== 传球统计结果 =====");
        System.out.println(teamA);
        System.out.println(teamB);
        // 5. 比较哪队更高
        System.out.println("\n===== 比较结果 =====");
        double rateA = teamA.getSuccessRate();
        double rateB = teamB.getSuccessRate();
        if (rateA > rateB) {
            System.out.printf("%s 传球成功率更高,领先 %.2f 个百分点%n",
                    teamA.name, rateA - rateB);
        } else if (rateB > rateA) {
            System.out.printf("%s 传球成功率更高,领先 %.2f 个百分点%n",
                    teamB.name, rateB - rateA);
        } else {
            System.out.println("两队传球成功率相同!");
        }
    }
}

运行结果

===== 传球统计结果 =====
A队: 总传球=25, 成功=20, 成功率=80.00%
B队: 总传球=22, 成功=15, 成功率=68.18%
===== 比较结果 =====
A队 传球成功率更高,领先 11.82 个百分点

代码说明

核心设计

  1. Team 类:封装球队信息,包含:

    • totalPasses:总传球次数
    • successPasses:成功传球次数
    • addPass(boolean):添加一次传球记录
    • getSuccessRate():计算百分比成功率
  2. 成功率计算:

    (double) successPasses / totalPasses * 100

    注意使用 (double) 强制转换,避免整数除法丢失精度。

  3. 比较逻辑:使用 if-else 三元判断,并输出领先的百分点。

进阶版本:从控制台输入

如果需要手动输入数据:

import java.util.Scanner;
public class PassSuccessRateInput {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入A队总传球次数: ");
        int totalA = sc.nextInt();
        System.out.print("请输入A队成功传球次数: ");
        int successA = sc.nextInt();
        System.out.print("请输入B队总传球次数: ");
        int totalB = sc.nextInt();
        System.out.print("请输入B队成功传球次数: ");
        int successB = sc.nextInt();
        double rateA = (double) successA / totalA * 100;
        double rateB = (double) successB / totalB * 100;
        System.out.printf("A队成功率: %.2f%%%n", rateA);
        System.out.printf("B队成功率: %.2f%%%n", rateB);
        if (rateA > rateB) {
            System.out.printf("A队成功率更高,领先 %.2f 个百分点%n", rateA - rateB);
        } else if (rateB > rateA) {
            System.out.printf("B队成功率更高,领先 %.2f 个百分点%n", rateB - rateA);
        } else {
            System.out.println("两队成功率相同");
        }
        sc.close();
    }
}

扩展思路

  • 使用 Map<String, Team>:支持任意多支球队比较,找出最大值
  • 使用 Stream 流式计算:Arrays.stream(passes).filter(b -> b).count()
  • 从文件/CSV读取数据:真实比赛数据通常来自数据文件或API
  • 加入场地、上半场/下半场等维度:更细粒度的传球成功率分析

如果需要多队比较或从文件读取数据的版本,可以告诉我。

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