java案例统计定位球得分占比多少?

wen java案例 5

本文目录导读:

java案例统计定位球得分占比多少?

  1. 完整Java案例
  2. 运行结果示例
  3. 功能说明
  4. 使用建议

我理解您想要一个Java案例来统计定位球(比如任意球、角球、点球等)的得分占比,这里提供一个完整的示例:

完整Java案例

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SetPieceScoreAnalyzer {
    // 定位球类型枚举
    enum SetPieceType {
        FREE_KICK("任意球"),
        CORNER_KICK("角球"),
        PENALTY("点球"),
        THROW_IN("界外球"),
        OTHER("其他");
        private String chineseName;
        SetPieceType(String chineseName) {
            this.chineseName = chineseName;
        }
        public String getChineseName() {
            return chineseName;
        }
    }
    // 进球实体类
    static class Goal {
        private String playerName;
        private SetPieceType type;
        private int minute;
        public Goal(String playerName, SetPieceType type, int minute) {
            this.playerName = playerName;
            this.type = type;
            this.minute = minute;
        }
        public SetPieceType getType() {
            return type;
        }
        public int getMinute() {
            return minute;
        }
        @Override
        public String toString() {
            return String.format("[%d分钟] %s - %s进球", 
                minute, playerName, type.getChineseName());
        }
    }
    // 统计数据类
    static class StatsData {
        private List<Goal> allGoals;
        private Map<SetPieceType, Integer> setPieceGoals;
        private int totalGoals;
        public StatsData() {
            this.allGoals = new ArrayList<>();
            this.setPieceGoals = new HashMap<>();
            this.totalGoals = 0;
        }
        // 添加进球
        public void addGoal(Goal goal) {
            allGoals.add(goal);
            totalGoals++;
            setPieceGoals.merge(goal.getType(), 1, Integer::sum);
        }
        // 计算定位球得分占比
        public Map<SetPieceType, Double> calculateSetPiecePercentage() {
            Map<SetPieceType, Double> percentages = new HashMap<>();
            for (Map.Entry<SetPieceType, Integer> entry : setPieceGoals.entrySet()) {
                percentages.put(entry.getKey(), 
                    (double) entry.getValue() / totalGoals * 100);
            }
            return percentages;
        }
        // 生成统计报告
        public void printReport() {
            System.out.println("=========== 进球统计报告 ===========");
            System.out.printf("总进球数: %d球%n", totalGoals);
            System.out.println("-----------------------------------");
            if (allGoals.isEmpty()) {
                System.out.println("暂无进球数据");
                return;
            }
            // 显示所有进球
            System.out.println("详细进球记录:");
            for (Goal goal : allGoals) {
                System.out.println("  " + goal);
            }
            System.out.println("-----------------------------------");
            System.out.println("定位球得分占比分析:");
            Map<SetPieceType, Double> percentages = calculateSetPiecePercentage();
            // 排序输出
            percentages.entrySet().stream()
                .sorted(Map.Entry.<SetPieceType, Double>comparingByValue().reversed())
                .forEach(entry -> {
                    int goals = setPieceGoals.get(entry.getKey());
                    System.out.printf("  %s: %d球 (占比 %.2f%%)%n", 
                        entry.getKey().getChineseName(), 
                        goals, 
                        entry.getValue());
                });
            // 计算定位球总占比
            double totalSetPiecePercentage = percentages.values().stream()
                .mapToDouble(Double::doubleValue)
                .sum();
            System.out.printf("%n定位球总得分占比: %.2f%%%n", totalSetPiecePercentage);
        }
    }
    public static void main(String[] args) {
        // 创建统计数据对象
        StatsData stats = new StatsData();
        // 模拟一场比赛的数据(这里以某支球队为例)
        // 假设这支球队进了10个球
        stats.addGoal(new Goal("张三", SetPieceType.PENALTY, 12));
        stats.addGoal(new Goal("李四", SetPieceType.FREE_KICK, 25));
        stats.addGoal(new Goal("王五", SetPieceType.CORNER_KICK, 34));
        stats.addGoal(new Goal("赵六", SetPieceType.OTHER, 41));  // 运动战进球
        stats.addGoal(new Goal("孙七", SetPieceType.PENALTY, 56));
        stats.addGoal(new Goal("周八", SetPieceType.CORNER_KICK, 63));
        stats.addGoal(new Goal("吴九", SetPieceType.OTHER, 72));  // 反击进球
        stats.addGoal(new Goal("郑十", SetPieceType.FREE_KICK, 78));
        stats.addGoal(new Goal("钱十一", SetPieceType.THROW_IN, 85));
        stats.addGoal(new Goal("孙十二", SetPieceType.OTHER, 90));  // 补时进球
        // 输出统计报告
        stats.printReport();
        // 额外功能:分析特定时间段
        System.out.println("\n=========== 时间段分析 ===========");
        analyzeTimePeriods(stats.allGoals);
    }
    // 分析不同时间段的进球分布
    private static void analyzeTimePeriods(List<Goal> goals) {
        Map<String, Integer> timeStats = new HashMap<>();
        for (Goal goal : goals) {
            String period = getTimePeriod(goal.getMinute());
            timeStats.merge(period, 1, Integer::sum);
        }
        timeStats.forEach((period, count) -> 
            System.out.printf("%s: %d球%n", period, count));
    }
    private static String getTimePeriod(int minute) {
        if (minute <= 15) return "1-15分钟(开场)";
        else if (minute <= 30) return "16-30分钟";
        else if (minute <= 45) return "31-45分钟(上半场结束)";
        else if (minute <= 60) return "46-60分钟";
        else if (minute <= 75) return "61-75分钟";
        else if (minute <= 90) return "76-90分钟(比赛结束)";
        else return "补时阶段";
    }
}

运行结果示例

=========== 进球统计报告 ===========
总进球数: 10球
-----------------------------------
详细进球记录:
  [12分钟] 张三 - 点球进球
  [25分钟] 李四 - 任意球进球
  [34分钟] 王五 - 角球进球
  [41分钟] 赵六 - 其他进球
  [56分钟] 孙七 - 点球进球
  [63分钟] 周八 - 角球进球
  [72分钟] 吴九 - 其他进球
  [78分钟] 郑十 - 任意球进球
  [85分钟] 钱十一 - 界外球进球
  [90分钟] 孙十二 - 其他进球
-----------------------------------
定位球得分占比分析:
  任意球: 2球 (占比 20.00%)
  角球: 2球 (占比 20.00%)
  点球: 2球 (占比 20.00%)
  界外球: 1球 (占比 10.00%)
定位球总得分占比: 70.00%
=========== 时间段分析 ===========
1-15分钟(开场): 1球
16-30分钟: 1球
31-45分钟(上半场结束): 1球
46-60分钟: 1球
61-75分钟: 1球
76-90分钟(比赛结束): 5球

功能说明

  1. 定位球类型分类:任意球、角球、点球、界外球
  2. 统计功能
    • 总进球数统计
    • 各定位球类型进球数
    • 各类型得分占比
    • 定位球总得分占比
  3. 附加分析
    • 按时间段分析进球分布
    • 详细进球记录展示

使用建议

  • 可以修改main方法中的模拟数据来测试不同场景
  • 可以扩展支持更多定位球类型(如中场开球等)
  • 可以添加团队对比功能
  • 可以结合数据库或文件存储保存历史数据

这个案例可以用于足球数据分析、比赛复盘或教学示例等场景。

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