java案例统计角球数哪边领先?

wen java案例 1

本文目录导读:

java案例统计角球数哪边领先?

  1. 需求说明
  2. 基础版 Java 代码
  3. 代码解析
  4. 进阶版:使用枚举和统计对象
  5. 如果是从数据库或接口统计
  6. 可扩展方向

下面是一个用 Java 统计足球比赛角球数哪边领先的完整案例。
我会先给一个可直接运行的 main 示例,再解释核心思路,最后给出可扩展成真实项目的写法。


需求说明

假设有一场比赛,我们记录了两支球队的角球事件:

  • 主队:Home
  • 客队:Away

每发生一次角球,就往统计里加一次。
最后比较两边角球数,输出:

  • 主队领先
  • 客队领先
  • 角球数相同

基础版 Java 代码

import java.util.ArrayList;
import java.util.List;
public class CornerStatsDemo {
    // 角球事件,记录是哪一队获得的角球
    static class CornerEvent {
        private String team; // "HOME" 或 "AWAY"
        public CornerEvent(String team) {
            this.team = team;
        }
        public String getTeam() {
            return team;
        }
    }
    public static void main(String[] args) {
        // 模拟一场比赛的角球事件
        List<CornerEvent> events = new ArrayList<>();
        events.add(new CornerEvent("HOME"));
        events.add(new CornerEvent("AWAY"));
        events.add(new CornerEvent("HOME"));
        events.add(new CornerEvent("HOME"));
        events.add(new CornerEvent("AWAY"));
        events.add(new CornerEvent("HOME"));
        // 统计角球
        int homeCorners = 0;
        int awayCorners = 0;
        for (CornerEvent event : events) {
            if ("HOME".equalsIgnoreCase(event.getTeam())) {
                homeCorners++;
            } else if ("AWAY".equalsIgnoreCase(event.getTeam())) {
                awayCorners++;
            }
        }
        // 输出统计结果
        System.out.println("主队角球数: " + homeCorners);
        System.out.println("客队角球数: " + awayCorners);
        // 判断哪边领先
        if (homeCorners > awayCorners) {
            System.out.println("角球数:主队领先");
        } else if (awayCorners > homeCorners) {
            System.out.println("角球数:客队领先");
        } else {
            System.out.println("角球数:双方持平");
        }
    }
}

运行结果示例

主队角球数: 4
客队角球数: 2
角球数:主队领先

代码解析

1 定义角球事件

static class CornerEvent {
    private String team;
}

这里用 team 表示角球是哪一方获得的:

  • HOME:主队
  • AWAY:客队

真实项目中,你还可以加上:

  • 比赛时间 minute
  • 球员
  • 半场信息
  • 比赛 ID
class CornerEvent {
    private String matchId;
    private String team;
    private int minute;
}

2 遍历统计

for (CornerEvent event : events) {
    if ("HOME".equalsIgnoreCase(event.getTeam())) {
        homeCorners++;
    } else if ("AWAY".equalsIgnoreCase(event.getTeam())) {
        awayCorners++;
    }
}

这段代码的核心逻辑就是:

  • 遇到主队角球,homeCorners + 1
  • 遇到客队角球,awayCorners + 1

3 判断领先

if (homeCorners > awayCorners) {
    System.out.println("角球数:主队领先");
} else if (awayCorners > homeCorners) {
    System.out.println("角球数:客队领先");
} else {
    System.out.println("角球数:双方持平");
}

这就是“哪边领先”的判断逻辑。


进阶版:使用枚举和统计对象

如果项目更规范,建议不要用字符串 "HOME"、"AWAY",而是用枚举。

import java.util.ArrayList;
import java.util.List;
public class CornerStatsDemo2 {
    enum Team {
        HOME, AWAY
    }
    static class CornerEvent {
        private final Team team;
        public CornerEvent(Team team) {
            this.team = team;
        }
        public Team getTeam() {
            return team;
        }
    }
    static class CornerStats {
        private int homeCorners;
        private int awayCorners;
        public void addCorner(Team team) {
            if (team == Team.HOME) {
                homeCorners++;
            } else if (team == Team.AWAY) {
                awayCorners++;
            }
        }
        public int getHomeCorners() {
            return homeCorners;
        }
        public int getAwayCorners() {
            return awayCorners;
        }
        public String getLeader() {
            if (homeCorners > awayCorners) {
                return "主队领先";
            } else if (awayCorners > homeCorners) {
                return "客队领先";
            } else {
                return "双方持平";
            }
        }
    }
    public static void main(String[] args) {
        List<CornerEvent> events = new ArrayList<>();
        events.add(new CornerEvent(Team.HOME));
        events.add(new CornerEvent(Team.AWAY));
        events.add(new CornerEvent(Team.HOME));
        events.add(new CornerEvent(Team.HOME));
        events.add(new CornerEvent(Team.AWAY));
        events.add(new CornerEvent(Team.HOME));
        CornerStats stats = new CornerStats();
        for (CornerEvent event : events) {
            stats.addCorner(event.getTeam());
        }
        System.out.println("主队角球数: " + stats.getHomeCorners());
        System.out.println("客队角球数: " + stats.getAwayCorners());
        System.out.println("角球数: " + stats.getLeader());
    }
}

如果是从数据库或接口统计

真实项目中,角球数据通常来自数据库,例如表结构:

CREATE TABLE corner_event (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    match_id BIGINT NOT NULL,
    team_type VARCHAR(10) NOT NULL, -- HOME / AWAY
    minute INT
);

SQL 统计:

SELECT
    SUM(CASE WHEN team_type = 'HOME' THEN 1 ELSE 0 END) AS home_corners,
    SUM(CASE WHEN team_type = 'AWAY' THEN 1 ELSE 0 END) AS away_corners
FROM corner_event
WHERE match_id = 1001;

Java 里拿到结果后判断:

if (homeCorners > awayCorners) {
    System.out.println("主队角球领先");
} else if (awayCorners > homeCorners) {
    System.out.println("客队角球领先");
} else {
    System.out.println("角球持平");
}

可扩展方向

你可以继续扩展成:

  1. 按时间段统计角球
    比如前 15 分钟、上半场、下半场。

  2. 实时统计
    每来一条角球事件,就更新领先状态。

  3. 返回 JSON
    给前端返回:

{
  "homeCorners": 4,
  "awayCorners": 2,
  "leader": "HOME"
}
  1. 支持多场比赛
    用 Map<String, CornerStats> 按 matchId 分组。

统计角球数哪边领先的核心步骤是:

  1. 定义角球事件,标明主队或客队;
  2. 遍历事件,分别累加主队和客队角球数;
  3. 比较两个数值:
    • 主队多 → 主队领先
    • 客队多 → 客队领先
    • 一样多 → 持平

如果你需要,我还可以继续给你写一个:

  • 支持实时更新的版本
  • Spring Boot 接口版本
  • 从 SQL 查询到返回 JSON 的完整案例

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