本文目录导读:

我来为你写一个Java案例,统计两队传球成功率并比较哪队更高。
完整代码实现
import java.util.*;
// 传球记录类
class PassRecord {
private String team; // 队伍名称
private boolean success; // 是否成功
public PassRecord(String team, boolean success) {
this.team = team;
this.success = success;
}
public String getTeam() { return team; }
public boolean isSuccess() { return success; }
}
// 统计结果类
class TeamStats {
String teamName;
int totalPasses;
int successPasses;
public TeamStats(String teamName) {
this.teamName = teamName;
}
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%%",
teamName, totalPasses, successPasses, getSuccessRate());
}
}
public class PassSuccessRateDemo {
public static void main(String[] args) {
// 1. 模拟比赛传球数据(真实场景可从文件/数据库/API读取)
List<PassRecord> records = new ArrayList<>();
Random random = new Random(42); // 固定种子便于复现
// 模拟A队80次传球,成功率约85%
for (int i = 0; i < 80; i++) {
records.add(new PassRecord("Team A", random.nextDouble() < 0.85));
}
// 模拟B队75次传球,成功率约78%
for (int i = 0; i < 75; i++) {
records.add(new PassRecord("Team B", random.nextDouble() < 0.78));
}
// 2. 使用Map统计每队数据
Map<String, TeamStats> statsMap = new LinkedHashMap<>();
for (PassRecord record : records) {
statsMap.computeIfAbsent(record.getTeam(), TeamStats::new)
.addPass(record.isSuccess());
}
// 3. 输出统计结果
System.out.println("========== 传球统计结果 ==========");
statsMap.values().forEach(System.out::println);
// 4. 找出成功率更高的队伍
TeamStats best = null;
for (TeamStats stat : statsMap.values()) {
if (best == null || stat.getSuccessRate() > best.getSuccessRate()) {
best = stat;
}
}
System.out.println("\n========== 对比结果 ==========");
if (best != null) {
System.out.printf("传球成功率最高的队伍是: %s (%.2f%%)%n",
best.teamName, best.getSuccessRate());
}
}
}
运行结果示例
========== 传球统计结果 ==========
Team A: 总传球 80 次, 成功 70 次, 成功率 87.50%
Team B: 总传球 75 次, 成功 60 次, 成功率 80.00%
========== 对比结果 ==========
传球成功率最高的队伍是: Team A (87.50%)
代码结构说明
| 类/部分 | 作用 |
|---|---|
PassRecord |
封装单次传球记录(队伍 + 成功与否) |
TeamStats |
累计每队传球数据并计算成功率 |
Map<String, TeamStats> |
按队伍名分组统计 |
computeIfAbsent |
Java 8+ 优雅地分组,避免判空 |
| 最后循环 | 遍历找出成功率最高的队伍 |
应用到真实场景
如果要从CSV文件读取真实数据,只需替换数据来源部分:
// 示例:从 CSV 读取(格式: team,success)
try (BufferedReader br = new BufferedReader(new FileReader("passes.csv"))) {
String line;
while ((line = br.readLine()) != null) {
String[] parts = line.split(",");
records.add(new PassRecord(parts[0], Boolean.parseBoolean(parts[1])));
}
} catch (IOException e) {
e.printStackTrace();
}
进阶扩展建议
- 按球员统计:给
PassRecord增加playerName字段,可以进一步统计每个球员的成功率。 - 按半场/时间段统计:增加
minute字段,分析上下半场表现。 - 传球类型:区分短传、长传、直塞等类型的成功率。
- 使用 Stream API 简化:
Map<String, Double> rateMap = records.stream() .collect(Collectors.groupingBy( PassRecord::getTeam, Collectors.averagingInt(r -> r.isSuccess() ? 1 : 0) )); - 可视化:配合 JFreeChart 输出柱状图对比。
需要我加上按球员细分或Stream 版本的完整代码吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播