这个java案例显示人盯人防守成功率?

wen java案例 2

本文目录导读:

这个java案例显示人盯人防守成功率?

  1. 完整Java代码
  2. 运行结果
  3. 关键点说明

我来帮你写一个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 或数据库表结构),我可以帮你改成读取真实数据的版本。

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