本文目录导读:

下面是一个用 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("角球持平");
}
可扩展方向
你可以继续扩展成:
-
按时间段统计角球
比如前 15 分钟、上半场、下半场。 -
实时统计
每来一条角球事件,就更新领先状态。 -
返回 JSON
给前端返回:
{
"homeCorners": 4,
"awayCorners": 2,
"leader": "HOME"
}
- 支持多场比赛
用Map<String, CornerStats>按matchId分组。
统计角球数哪边领先的核心步骤是:
- 定义角球事件,标明主队或客队;
- 遍历事件,分别累加主队和客队角球数;
- 比较两个数值:
- 主队多 → 主队领先
- 客队多 → 客队领先
- 一样多 → 持平
如果你需要,我还可以继续给你写一个:
- 支持实时更新的版本
- Spring Boot 接口版本
- 从 SQL 查询到返回 JSON 的完整案例