java案例显示主队胜率大概有多少?

wen java案例 2

Java 案例:计算主队胜率

下面给你一个完整的 Java 示例,演示如何从比赛数据中统计主队胜率。

java案例显示主队胜率大概有多少?

完整代码示例

import java.util.*;
public class HomeWinRate {
    // 比赛结果枚举
    enum Result { HOME_WIN, DRAW, AWAY_WIN }
    // 比赛记录
    static class Match {
        String homeTeam;
        String awayTeam;
        int homeGoals;
        int awayGoals;
        Match(String homeTeam, String awayTeam, int homeGoals, int awayGoals) {
            this.homeTeam = homeTeam;
            this.awayTeam = awayTeam;
            this.homeGoals = homeGoals;
            this.awayGoals = awayGoals;
        }
        Result getResult() {
            if (homeGoals > awayGoals) return Result.HOME_WIN;
            if (homeGoals < awayGoals) return Result.AWAY_WIN;
            return Result.DRAW;
        }
    }
    public static void main(String[] args) {
        // 模拟一批比赛数据(可替换为数据库/文件/API)
        List<Match> matches = Arrays.asList(
            new Match("曼城", "利物浦", 2, 1),   // 主胜
            new Match("阿森纳", "切尔西", 1, 1), // 平
            new Match("曼联", "热刺", 0, 2),     // 客胜
            new Match("曼城", "阿森纳", 3, 0),   // 主胜
            new Match("利物浦", "曼联", 2, 0),   // 主胜
            new Match("切尔西", "热刺", 1, 2),   // 客胜
            new Match("曼城", "切尔西", 1, 0),   // 主胜
            new Match("阿森纳", "利物浦", 2, 2), // 平
            new Match("曼联", "曼城", 0, 3),     // 客胜
            new Match("热刺", "阿森纳", 1, 0)    // 主胜
        );
        // 统计
        long homeWins = 0, draws = 0, awayWins = 0;
        for (Match m : matches) {
            switch (m.getResult()) {
                case HOME_WIN -> homeWins++;
                case DRAW     -> draws++;
                case AWAY_WIN -> awayWins++;
            }
        }
        int total = matches.size();
        double homeRate = (double) homeWins / total * 100;
        double drawRate = (double) draws / total * 100;
        double awayRate = (double) awayWins / total * 100;
        System.out.printf("总场次: %d%n", total);
        System.out.printf("主胜: %d 场 (%.1f%%)%n", homeWins, homeRate);
        System.out.printf("平局: %d 场 (%.1f%%)%n", draws, drawRate);
        System.out.printf("客胜: %d 场 (%.1f%%)%n", awayWins, awayRate);
        System.out.printf(">>> 主队胜率约为: %.2f%%%n", homeRate);
        // 按主队统计各自的胜率
        System.out.println("\n--- 各主队主场胜率 ---");
        Map<String, int[]> stats = new HashMap<>(); // [总场, 主胜场]
        for (Match m : matches) {
            int[] s = stats.computeIfAbsent(m.homeTeam, k -> new int[2]);
            s[0]++;
            if (m.getResult() == Result.HOME_WIN) s[1]++;
        }
        stats.forEach((team, s) -> {
            double rate = (double) s[1] / s[0] * 100;
            System.out.printf("%-6s 主场 %d 场,胜 %d 场,胜率 %.1f%%%n",
                    team, s[0], s[1], rate);
        });
    }
}

运行结果(基于示例数据)

总场次: 10
主胜: 5 场 (50.0%)
平局: 2 场 (20.0%)
客胜: 3 场 (30.0%)
>>> 主队胜率约为: 50.00%
--- 各主队主场胜率 ---
曼城    主场 3 场,胜 3 场,胜率 100.0%
阿森纳  主场 2 场,胜 0 场,胜率 0.0%
利物浦  主场 1 场,胜 1 场,胜率 100.0%
曼联    主场 2 场,胜 0 场,胜率 0.0%
切尔西  主场 1 场,胜 0 场,胜率 0.0%
热刺    主场 1 场,胜 1 场,胜率 100.0%

真实场景下"主队胜率大概多少"?

示例数据是虚构的,但如果你换成真实联赛数据,经验值大概是:

场景 主胜率 平局 客胜
英超/西甲等五大联赛(近 10 年) 约 45%~48% 约 24% 约 28%~30%
中超 约 42%~45% 约 25% 约 30%
世界杯等国际大赛 约 45% 25%~28% 27%~30%
强主场环境(如南美/高原) 可到 55%~60%

职业足球中,主队胜率普遍在 45%~50% 左右,"主场优势"大约值 +0.3~0.5 个进球,对应胜率提升 3~5 个百分点。

扩展建议(生产环境)

  1. 数据来源:可从 football-data.org、API-Football 或本地 Excel/CSV 读取。
  2. 改进统计:
    • 分段统计(按赛季、按联赛、按球队)
    • 加权(近期比赛权重更高)
    • 加入置信区间(Wilson score interval)
  3. 注意小数精度:(double) homeWins / total 避免整数除法。
  4. 平局单独统计,不要算入"非主胜"里就当作客胜。

如果你把具体的比赛数据(CSV 或字段说明)发我,我可以帮你把这段代码改成直接读取文件并输出准确胜率。

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