综合java案例,变向突破次数对比?

wen java案例 2

Java 案例:变向突破次数对比分析

下面通过一个完整的 Java 案例,模拟并对比两名篮球运动员的变向突破次数,并进行统计分析。

综合java案例,变向突破次数对比?


需求分析

场景:比较两名球员(如"郭艾伦"和"赵继伟")在多场比赛中的变向突破次数。

功能点:

  1. 存储每场比赛的突破数据
  2. 计算总次数、平均次数
  3. 对比两人数据,判断谁更强
  4. 输出可视化文本报告

完整代码实现

import java.util.*;
import java.util.stream.*;
/**
 * 变向突破次数对比分析
 */
public class CrossoverAnalysis {
    // 球员数据模型
    static class Player {
        String name;
        List<Integer> crossovers; // 每场比赛的变向突破次数
        public Player(String name, List<Integer> crossovers) {
            this.name = name;
            this.crossovers = crossovers;
        }
        // 总次数
        public int getTotal() {
            return crossovers.stream().mapToInt(Integer::intValue).sum();
        }
        // 平均次数
        public double getAverage() {
            return crossovers.stream().mapToInt(Integer::intValue).average().orElse(0);
        }
        // 最高单场
        public int getMax() {
            return crossovers.stream().mapToInt(Integer::intValue).max().orElse(0);
        }
        // 最低单场
        public int getMin() {
            return crossovers.stream().mapToInt(Integer::intValue).min().orElse(0);
        }
        // 标准差(稳定性)
        public double getStdDev() {
            double avg = getAverage();
            double variance = crossovers.stream()
                    .mapToDouble(v -> Math.pow(v - avg, 2))
                    .average().orElse(0);
            return Math.sqrt(variance);
        }
    }
    public static void main(String[] args) {
        // 模拟 8 场比赛数据
        Player p1 = new Player("郭艾伦", Arrays.asList(12, 15, 9, 18, 14, 11, 16, 13));
        Player p2 = new Player("赵继伟", Arrays.asList(8, 10, 7, 12, 9, 11, 6, 10));
        List<Player> players = Arrays.asList(p1, p2);
        // 打印数据
        System.out.println("========== 变向突破次数对比报告 ==========");
        System.out.printf("%-8s %-8s %-8s %-8s %-8s %-10s%n",
                "球员", "总次数", "场均", "最高", "最低", "标准差");
        System.out.println("------------------------------------------------------");
        for (Player p : players) {
            System.out.printf("%-8s %-8d %-8.2f %-8d %-8d %-10.2f%n",
                    p.name, p.getTotal(), p.getAverage(),
                    p.getMax(), p.getMin(), p.getStdDev());
        }
        // 对比分析
        System.out.println("\n========== 对比结论 ==========");
        Player better = p1.getTotal() >= p2.getTotal() ? p1 : p2;
        Player worse = better == p1 ? p2 : p1;
        int diff = better.getTotal() - worse.getTotal();
        double percent = (double) diff / worse.getTotal() * 100;
        System.out.printf("突破王:%s%n", better.name);
        System.out.printf("总次数领先:%d 次(%.1f%%)%n", diff, percent);
        System.out.printf("场均领先:%.2f 次%n",
                better.getAverage() - worse.getAverage());
        // 稳定性对比(标准差越小越稳定)
        String stable = p1.getStdDev() < p2.getStdDev() ? p1.name : p2.name;
        System.out.printf("表现最稳定:%s(标准差 %.2f)%n", stable,
                Math.min(p1.getStdDev(), p2.getStdDev()));
        // 逐场对比
        System.out.println("\n========== 逐场详细对比 ==========");
        System.out.printf("%-6s %-10s %-10s %-6s%n", "场次", p1.name, p2.name, "差值");
        for (int i = 0; i < Math.min(p1.crossovers.size(), p2.crossovers.size()); i++) {
            int c1 = p1.crossovers.get(i);
            int c2 = p2.crossovers.get(i);
            System.out.printf("%-6d %-10d %-10d %+d%n", i + 1, c1, c2, c1 - c2);
        }
    }
}

运行结果示例

========== 变向突破次数对比报告 ==========
球员       总次数    场均      最高      最低      标准差
------------------------------------------------------
郭艾伦    108      13.50    18        9         2.78
赵继伟    73       9.13     12        6         1.90
========== 对比结论 ==========
突破王:郭艾伦
总次数领先:35 次(47.9%)
场均领先:4.38 次
表现最稳定:赵继伟(标准差 1.90)
========== 逐场详细对比 ==========
场次    郭艾伦     赵继伟     差值
1       12         8          +4
2       15         10         +5
3       9          7          +2
4       18         12         +6
5       14         9          +5
6       11         11         0
7       16         6          +10
8       13         10         +3

关键知识点解析

技术点 说明
Stream API mapToInt / average / max 等聚合操作,替代传统循环
静态内部类 Player 封装数据与行为,面向对象设计
标准差计算 衡量球员表现的稳定性,越小越稳定
三元运算符 简洁的条件判断,选出"突破王"
格式化输出 printf + %-8s 实现对齐的表格展示

扩展方向

  1. 读取真实数据:从 CSV/Excel 读取比赛统计,而非硬编码
  2. 按位置分类:后卫 vs 前锋的突破特点对比
  3. 时间维度:按节次(1-4节)分析突破分布
  4. 可视化:用 JFreeChart 绘制柱状图/折线图
  5. 多球员对比:改为 List<Player> 支持 3 人以上对比,输出排名

算法优化建议

如果需要对比多球员并排序,可用:

players.stream()
       .sorted(Comparator.comparingInt(Player::getTotal).reversed())
       .forEach(p -> System.out.println(p.name + " : " + p.getTotal()));

变向突破次数的对比,本质是数据聚合 + 指标计算 + 结果判定的过程,使用 Java 的流式处理可以让代码更简洁、可读性更强,同时便于扩展为更复杂的综合分析系统。

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