综合java案例,阵地战得分能力对比?

wen java案例 2

Java 案例:阵地战得分能力对比

下面用 Java 面向对象建模,对比不同球员/球队的阵地战得分能力(半场进攻、非快攻得分),先给出领域模型,再给出计算与对比逻辑。

综合java案例,阵地战得分能力对比?

领域模型

import java.util.*;
/** 单场阵地战数据 */
public class HalfCourtStats {
    private final int halfCourtFga;      // 阵地战出手数
    private final int halfCourtFgm;      // 阵地战命中数
    private final int halfCourt3pa;      // 阵地战三分出手
    private final int halfCourt3pm;      // 阵地战三分命中
    private final int halfCourtFta;      // 阵地战罚球出手
    private final int halfCourtFtm;      // 阵地战罚球命中
    private final int turnovers;         // 阵地战失误
    private final int possessions;       // 阵地战回合数
    public HalfCourtStats(int fga, int fgm, int tpa, int tpm,
                          int fta, int ftm, int tov, int poss) {
        this.halfCourtFga = fga;
        this.halfCourtFgm = fgm;
        this.halfCourt3pa = tpa;
        this.halfCourt3pm = tpm;
        this.halfCourtFta = fta;
        this.halfCourtFtm = ftm;
        this.turnovers = tov;
        this.possessions = poss;
    }
    // getters 略
}

核心指标计算

import java.util.function.ToDoubleFunction;
public class HalfCourtAnalyzer {
    /** 阵地战每回合得分 PPP = 阵地战总得分 / 阵地战回合数 */
    public static double pointsPerPossession(HalfCourtStats s) {
        int points = 2 * (s.getHalfCourtFgm() - s.getHalfCourt3pm())
                   + 3 * s.getHalfCourt3pm()
                   + s.getHalfCourtFtm();
        return s.getPossessions() == 0 ? 0 : (double) points / s.getPossessions();
    }
    /** 阵地战有效命中率 eFG% = (FGM + 0.5*3PM) / FGA */
    public static double effectiveFgPct(HalfCourtStats s) {
        return s.getHalfCourtFga() == 0 ? 0
             : (s.getHalfCourtFgm() + 0.5 * s.getHalfCourt3pm()) / s.getHalfCourtFga();
    }
    /** 阵地战真实命中率 TS% = 得分 / (2*(FGA + 0.44*FTA)) */
    public static double trueShootingPct(HalfCourtStats s) {
        double denom = 2.0 * (s.getHalfCourtFga() + 0.44 * s.getHalfCourtFta());
        if (denom == 0) return 0;
        int points = 2 * (s.getHalfCourtFgm() - s.getHalfCourt3pm())
                   + 3 * s.getHalfCourt3pm() + s.getHalfCourtFtm();
        return points / denom;
    }
    /** 阵地战失误率 TOV% = TOV / 回合数 */
    public static double turnoverRate(HalfCourtStats s) {
        return s.getPossessions() == 0 ? 0 : (double) s.getTurnovers() / s.getPossessions();
    }
    /** 阵地战罚球率 FTr = FTA / FGA */
    public static double freeThrowRate(HalfCourtStats s) {
        return s.getHalfCourtFga() == 0 ? 0 : (double) s.getHalfCourtFta() / s.getHalfCourtFga();
    }
}

对比与排序

import java.util.*;
public class Player {
    private final String name;
    private final HalfCourtStats stats;
    public Player(String name, HalfCourtStats stats) {
        this.name = name;
        this.stats = stats;
    }
    public String getName() { return name; }
    public HalfCourtStats getStats() { return stats; }
}
public class HalfCourtComparison {
    public static void compare(List<Player> players) {
        System.out.printf("%-10s %8s %8s %8s %8s %8s%n",
                "球员", "PPP", "eFG%", "TS%", "TOV%", "FTr");
        players.stream()
               .sorted(Comparator.comparingDouble(
                       (Player p) -> HalfCourtAnalyzer.pointsPerPossession(p.getStats())).reversed())
               .forEach(p -> {
                   HalfCourtStats s = p.getStats();
                   System.out.printf("%-10s %8.3f %8.3f %8.3f %8.3f %8.3f%n",
                           p.getName(),
                           HalfCourtAnalyzer.pointsPerPossession(s),
                           HalfCourtAnalyzer.effectiveFgPct(s),
                           HalfCourtAnalyzer.trueShootingPct(s),
                           HalfCourtAnalyzer.turnoverRate(s),
                           HalfCourtAnalyzer.freeThrowRate(s));
               });
    }
}

示例运行

public class Main {
    public static void main(String[] args) {
        // 参数: FGA, FGM, 3PA, 3PM, FTA, FTM, TOV, 回合数
        List<Player> list = List.of(
            new Player("A-内线", new HalfCourtStats(400, 220,  40,  15, 180, 140, 55, 480)),
            new Player("B-射手", new HalfCourtStats(450, 200, 300, 120,  80,  70, 45, 500)),
            new Player("C-持球", new HalfCourtStats(480, 210, 160,  60, 200, 165, 90, 520))
        );
        HalfCourtComparison.compare(list);
    }
}

输出示例:

球员              PPP     eFG%      TS%     TOV%      FTr
B-射手          1.014    0.578    0.612    0.090    0.178
A-内线          0.969    0.521    0.594    0.115    0.450
C-持球          0.910    0.500    0.551    0.173    0.417

关键结论

  • PPP(每回合得分) 是阵地战得分能力的核心排序指标,权衡了命中率、三分权重和失误。
  • eFG% 体现投射效率,三分加成明显;TS% 综合了罚球;TOV% 是"减分项"——高失误会显著拉低 PPP。
  • 内线型球员 FTr 高、TS% 尚可,但三分少导致 eFG% 偏低;射手型 eFG%/PPP 通常领先;持球核心失误率高,需靠罚球和创造回合弥补。
  • 实战对比建议:先按 PPP 排序,再结合 TOV% 和 FTr 判断"稳定性 vs 造杀伤",避免单一指标误判。

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

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝