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 个百分点
代码说明
核心设计
-
Team 类:封装球队信息,包含:
totalPasses:总传球次数successPasses:成功传球次数addPass(boolean):添加一次传球记录getSuccessRate():计算百分比成功率
-
成功率计算:
(double) successPasses / totalPasses * 100
注意使用
(double)强制转换,避免整数除法丢失精度。 -
比较逻辑:使用
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
- 加入场地、上半场/下半场等维度:更细粒度的传球成功率分析
如果需要多队比较或从文件读取数据的版本,可以告诉我。