java案例怎么看两队的主客场战绩差异?

wen java案例 3

本文目录导读:

java案例怎么看两队的主客场战绩差异?

  1. 场景一:使用面向对象(内存中)
  2. 场景二:使用数据库(JDBC)
  3. 场景三:CSV/文件读取
  4. 进阶:考虑比赛阶段(常规赛/季后赛)
  5. 怎么“看”差异?(可视化/输出)
  6. 核心总结(怎么“看”)

在Java中分析两支球队的主客场战绩差异,通常涉及数据统计逻辑对比,具体做法取决于你的数据存储结构(是数据库、文件还是内存对象)。

以下是几种常见的场景及对应的核心代码案例:


使用面向对象(内存中)

假设你有一个 Match 类,包含主队、客队、比分和比赛阶段。

import java.util.ArrayList;
import java.util.List;
public class Main {
    public static void main(String[] args) {
        List<Match> allMatches = new ArrayList<>();
        // 模拟数据:添加比赛记录
        allMatches.add(new Match("湖人", "勇士", 112, 103, "常规赛"));
        allMatches.add(new Match("勇士", "湖人", 108, 110, "常规赛"));
        allMatches.add(new Match("湖人", "凯尔特人", 100, 99, "常规赛"));
        allMatches.add(new Match("凯尔特人", "勇士", 115, 105, "常规赛"));
        allMatches.add(new Match("勇士", "湖人", 120, 117, "常规赛"));
        // 分析湖人 vs 勇士的主客场战绩差异
        TeamComparisonResult result = compareHomeAwayPerformance(allMatches, "湖人", "勇士");
        System.out.println(result);
    }
    // 核心方法:统计两队主客场交锋中的胜率
    public static TeamComparisonResult compareHomeAwayPerformance(List<Match> matches, String teamA, String teamB) {
        int aHomeWin = 0; // A在主场赢B的次数
        int aAwayWin = 0; // A在客场赢B的次数(即B在主场输的次数)
        int bHomeWin = 0; // B在主场赢A的次数
        int bAwayWin = 0; // B在客场赢A的次数
        for (Match m : matches) {
            // 只关注这两队的比赛,且必须是一方主队,另一方是客队
            if ((m.homeTeam.equals(teamA) && m.awayTeam.equals(teamB)) || 
                (m.homeTeam.equals(teamB) && m.awayTeam.equals(teamA))) {
                boolean isAHome = m.homeTeam.equals(teamA);
                boolean isAWin = m.homeScore > m.awayScore; // 假设A是主队时,主队得分是homeScore
                if (isAHome) {
                    if (isAWin) aHomeWin++;
                    else bHomeWin++;
                } else {
                    // A是客队
                    if (isAWin) aAwayWin++;
                    else bAwayWin++;
                }
            }
        }
        return new TeamComparisonResult(teamA, teamB, aHomeWin, aAwayWin, bHomeWin, bAwayWin);
    }
}
// 比赛类
class Match {
    String homeTeam, awayTeam;
    int homeScore, awayScore;
    String stage; // 常规赛、季后赛
    Match(String homeTeam, String awayTeam, int homeScore, int awayScore, String stage) {
        this.homeTeam = homeTeam;
        this.awayTeam = awayTeam;
        this.homeScore = homeScore;
        this.awayScore = awayScore;
        this.stage = stage;
    }
}
// 结果封装类
class TeamComparisonResult {
    String teamA, teamB;
    int aHomeWin, aAwayWin, bHomeWin, bAwayWin;
    TeamComparisonResult(String teamA, String teamB, int aHomeWin, int aAwayWin, int bHomeWin, int bAwayWin) {
        this.teamA = teamA; this.teamB = teamB;
        this.aHomeWin = aHomeWin; this.aAwayWin = aAwayWin;
        this.bHomeWin = bHomeWin; this.bAwayWin = bAwayWin;
    }
    @Override
    public String toString() {
        return String.format("%s 主场胜 %s: %d次, 客场胜 %s: %d次.%n" +
                "%s 主场胜 %s: %d次, 客场胜 %s: %d次.",
                teamA, teamB, aHomeWin, teamB, aAwayWin,
                teamB, teamA, bHomeWin, teamA, bAwayWin);
    }
}

输出:

湖人 主场胜 勇士: 1次, 客场胜 勇士: 2次.
勇士 主场胜 湖人: 0次, 客场胜 湖人: 1次.

湖人主场对勇士胜率低,客场胜率高;勇士主场输湖人次数多,客场胜湖人次数多。


使用数据库(JDBC)

如果数据在MySQL中,你通常直接用SQL聚合比Java更高效。

-- 假设表名为 matches,字段:home_team, away_team, home_score, away_score
SELECT 
    home_team,
    away_team,
    SUM(CASE WHEN home_score > away_score THEN 1 ELSE 0 END) AS home_team_wins,
    SUM(CASE WHEN away_score > home_score THEN 1 ELSE 0 END) AS away_team_wins,
    COUNT(*) AS total_games
FROM matches
WHERE (home_team = '湖人' AND away_team = '勇士') 
   OR (home_team = '勇士' AND away_team = '湖人')
GROUP BY home_team, away_team;

Java代码(简化):

try (Connection conn = getConnection();
     PreparedStatement stmt = conn.prepareStatement(query)) {
    // 设置参数...
    ResultSet rs = stmt.executeQuery();
    while (rs.next()) {
        int homeWins = rs.getInt("home_team_wins");
        int awayWins = rs.getInt("away_team_wins");
        // 计算差异:湖人主场胜 vs 湖人客场胜
    }
}

CSV/文件读取

略(逻辑与场景一相同,先解析文件为List


进阶:考虑比赛阶段(常规赛/季后赛)

如果你要分析季后赛的强度差异,可以在 Match 中加入 stage 字段,并在循环中过滤:

if ("季后赛".equals(m.stage)) { ... }

怎么“看”差异?(可视化/输出)

如果只是为了直观展示差异,建议输出一个对比表,格式如下:

对阵 主场胜 客场胜 主场胜率 客场胜率 差异(主场-客场)
湖人(主) vs 勇士(客) 1 100% +100%
勇士(主) vs 湖人(客) 0 0% -100%

你可以用 JFreeChartSpark 图标展示柱状图,直观对比。


核心总结(怎么“看”)

无论代码怎么写,分析逻辑永远是:

  1. 筛选:找到两队交锋的所有比赛。
  2. 拆分:按“A主场 vs B客场”和“B主场 vs A客场”分两组。
  3. 统计:每组中主队胜场数和客队胜场数。
  4. 对比:计算胜率差(主场胜率 - 客场胜率),正数表示该队更擅长主场打对手,负数表示更擅长客场。

如果你有具体的数据结构(比如CSV格式、特定字段),我可以提供更适配的代码。

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