本文目录导读:

我来帮你写一个Java案例,计算和显示篮球比赛中人盯人防守的成功率。
完整Java代码
import java.util.ArrayList;
import java.util.List;
/**
* 人盯人防守成功率统计案例
*/
public class ManToManDefenseStats {
// 防守回合记录类
static class DefenseRound {
String defender; // 防守人
String attacker; // 进攻人
boolean success; // 是否防守成功
public DefenseRound(String defender, String attacker, boolean success) {
this.defender = defender;
this.attacker = attacker;
this.success = success;
}
}
public static void main(String[] args) {
// 模拟一场比赛的人盯人防守数据
List<DefenseRound> rounds = new ArrayList<>();
// 球员A的防守回合
rounds.add(new DefenseRound("A", "对方1号", true)); // 成功
rounds.add(new DefenseRound("A", "对方1号", false)); // 失败
rounds.add(new DefenseRound("A", "对方1号", true));
rounds.add(new DefenseRound("A", "对方1号", true));
rounds.add(new DefenseRound("A", "对方1号", false));
// 球员B的防守回合
rounds.add(new DefenseRound("B", "对方2号", true));
rounds.add(new DefenseRound("B", "对方2号", true));
rounds.add(new DefenseRound("B", "对方2号", true));
rounds.add(new DefenseRound("B", "对方2号", false));
// 球员C的防守回合
rounds.add(new DefenseRound("C", "对方3号", false));
rounds.add(new DefenseRound("C", "对方3号", false));
rounds.add(new DefenseRound("C", "对方3号", true));
rounds.add(new DefenseRound("C", "对方3号", false));
rounds.add(new DefenseRound("C", "对方3号", true));
rounds.add(new DefenseRound("C", "对方3号", false));
// 计算并显示每个球员的成功率
System.out.println("===== 人盯人防守成功率统计 =====");
System.out.printf("%-8s %-10s %-10s %-10s%n", "球员", "防守回合", "成功次数", "成功率");
System.out.println("------------------------------------------");
List<String> defenders = new ArrayList<>();
for (DefenseRound r : rounds) {
if (!defenders.contains(r.defender)) {
defenders.add(r.defender);
}
}
int totalRounds = 0;
int totalSuccess = 0;
for (String defender : defenders) {
int total = 0;
int success = 0;
for (DefenseRound r : rounds) {
if (r.defender.equals(defender)) {
total++;
if (r.success) success++;
}
}
double rate = (total == 0) ? 0 : (success * 100.0 / total);
System.out.printf("%-8s %-10d %-10d %.2f%%%n", defender, total, success, rate);
totalRounds += total;
totalSuccess += success;
}
// 全队总体成功率
double teamRate = (totalRounds == 0) ? 0 : (totalSuccess * 100.0 / totalRounds);
System.out.println("------------------------------------------");
System.out.printf("全队总体: 回合数=%d, 成功次数=%d, 成功率=%.2f%%%n",
totalRounds, totalSuccess, teamRate);
}
}
运行结果
===== 人盯人防守成功率统计 =====
球员 防守回合 成功次数 成功率
------------------------------------------
A 5 3 60.00%
B 4 3 75.00%
C 6 2 33.33%
------------------------------------------
全队总体: 回合数=15, 成功次数=8, 成功率=53.33%
关键点说明
核心公式
成功率 = 成功防守回合数 / 总防守回合数 × 100%
什么算"防守成功"? 通常定义为以下之一:
- 对方投篮不中
- 对方失误
- 对方被抢断/盖帽
- 24秒违例
代码结构
DefenseRound类:记录一次防守(谁防谁、是否成功)- 用
List存储所有回合数据 - 分组统计每位防守人的成功率和全队成功率
可扩展方向
- 从文件/数据库读取真实比赛数据
- 增加"对手投篮位置"、"两分/三分"等维度
- 导出为 CSV 报告
- 加入图形化界面显示
如果你有具体的数据格式(CSV 或数据库表结构),我可以帮你改成读取真实数据的版本。