本文目录导读:

我来为您设计一个Java案例来统计足球比赛中角球数哪边领先,这个案例包含多个功能模块:
完整实现代码
import java.util.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* 角球统计系统 - 用于统计比赛中哪边角球数领先
*/
public class CornerKickStatistics {
// 比赛信息类
static class MatchInfo {
private String homeTeam;
private String awayTeam;
private LocalDateTime matchTime;
private String stadium;
public MatchInfo(String homeTeam, String awayTeam, LocalDateTime matchTime, String stadium) {
this.homeTeam = homeTeam;
this.awayTeam = awayTeam;
this.matchTime = matchTime;
this.stadium = stadium;
}
@Override
public String toString() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
return String.format("%s VS %s\n比赛时间: %s\n比赛场地: %s",
homeTeam, awayTeam, matchTime.format(formatter), stadium);
}
public String getHomeTeam() { return homeTeam; }
public String getAwayTeam() { return awayTeam; }
}
// 角球事件类
static class CornerEvent {
private int minute;
private String team;
private String player;
private boolean scored;
public CornerEvent(int minute, String team, String player, boolean scored) {
this.minute = minute;
this.team = team;
this.player = player;
this.scored = scored;
}
@Override
public String toString() {
return String.format("%d分钟 - %s队 %s主罚角球%s",
minute, team, player, scored ? " → 进球!" : "");
}
}
// 角球统计类
static class CornerStatistic {
private int homeCorners;
private int awayCorners;
private List<CornerEvent> events;
public CornerStatistic() {
this.homeCorners = 0;
this.awayCorners = 0;
this.events = new ArrayList<>();
}
// 记录角球
public void addCorner(String team, int minute, String player, boolean scored) {
CornerEvent event = new CornerEvent(minute, team, player, scored);
events.add(event);
if ("主队".equals(team)) {
homeCorners++;
} else if ("客队".equals(team)) {
awayCorners++;
}
}
// 获取领先队伍
public String getLeadingTeam() {
if (homeCorners > awayCorners) {
return "主队";
} else if (awayCorners > homeCorners) {
return "客队";
} else {
return "平局";
}
}
// 获取领先角球数
public int getLeadCount() {
return Math.abs(homeCorners - awayCorners);
}
// 获取总角球数
public int getTotalCorners() {
return homeCorners + awayCorners;
}
// 打印统计信息
public void printStatistics() {
System.out.println("\n═══════════════════════════════════════");
System.out.println(" 角球统计报告");
System.out.println("═══════════════════════════════════════");
System.out.printf("主队角球数: %d\n", homeCorners);
System.out.printf("客队角球数: %d\n", awayCorners);
System.out.printf("总角球数: %d\n", getTotalCorners());
System.out.println("-------------------------------------");
String leading = getLeadingTeam();
if ("平局".equals(leading)) {
System.out.println("📊 当前为平局,没有领先方!");
} else {
System.out.printf("🏆 %s领先 %d 个角球!\n", leading, getLeadCount());
}
System.out.println("═══════════════════════════════════════");
}
// 打印角球事件列表
public void printEvents() {
System.out.println("\n📋 角球事件记录:");
Collections.sort(events, (e1, e2) -> Integer.compare(e1.minute, e2.minute));
for (CornerEvent event : events) {
System.out.println(" " + event);
}
}
// 判断是否有一方领先超过指定数量
public boolean isLeadingByMoreThan(int threshold) {
return getLeadCount() > threshold;
}
// 获取落后一方还需要多少个角球才能追平
public int getNeededToTie() {
return getLeadCount();
}
}
// 模拟数据生成器
static class DataSimulator {
private static final String[] PLAYERS_HOME = {"张伟", "李明", "王强", "赵磊", "陈晨"};
private static final String[] PLAYERS_AWAY = {"戴维", "约翰", "迈克", "汤姆", "詹姆斯"};
private static final Random random = new Random();
public static void simulateMatch(CornerStatistic stats, int duration) {
System.out.println("⏰ 比赛开始!");
int currentMinute = 0;
while (currentMinute < duration) {
// 随机决定是否产生角球(大约每3-5分钟一个)
if (random.nextInt(100) < 30) {
int minute = currentMinute + random.nextInt(5) + 1;
String team = random.nextBoolean() ? "主队" : "客队";
String player = team.equals("主队") ?
PLAYERS_HOME[random.nextInt(PLAYERS_HOME.length)] :
PLAYERS_AWAY[random.nextInt(PLAYERS_AWAY.length)];
boolean scored = random.nextInt(100) < 5; // 5%的角球得分率
stats.addCorner(team, minute, player, scored);
if (scored) {
System.out.printf("⚽ %d分钟 - %s队 %s主罚角球直接进球!!!\n",
minute, team, player);
} else {
System.out.printf("🔄 %d分钟 - %s队获得角球\n", minute, team);
}
}
currentMinute += 5;
// 模拟时间流逝
try {
Thread.sleep(500);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
// 控制台界面
static class ConsoleUI {
private Scanner scanner;
private MatchInfo matchInfo;
private CornerStatistic statistics;
public ConsoleUI() {
scanner = new Scanner(System.in);
}
public void start() {
System.out.println("═══════════════════════════════════════");
System.out.println(" ⚽ 足球角球统计系统 ⚽");
System.out.println("═══════════════════════════════════════");
createMatch();
showMainMenu();
}
private void createMatch() {
System.out.print("请输入主队名称: ");
String homeTeam = scanner.nextLine();
System.out.print("请输入客队名称: ");
String awayTeam = scanner.nextLine();
System.out.print("请输入比赛场地: ");
String stadium = scanner.nextLine();
matchInfo = new MatchInfo(homeTeam, awayTeam, LocalDateTime.now(), stadium);
statistics = new CornerStatistic();
System.out.println("\n✅ 比赛创建成功!");
System.out.println(matchInfo);
}
private void showMainMenu() {
while (true) {
System.out.println("\n═══════════════════════════════════════");
System.out.println(" 功能菜单");
System.out.println("═══════════════════════════════════════");
System.out.println("1. 手动记录角球");
System.out.println("2. 查看当前统计");
System.out.println("3. 查看角球事件");
System.out.println("4. 模拟比赛(自动生成)");
System.out.println("5. 快速查看领先方");
System.out.println("6. 退出系统");
System.out.println("═══════════════════════════════════════");
System.out.print("请选择操作: ");
int choice = scanner.nextInt();
scanner.nextLine(); // 清除换行符
switch (choice) {
case 1:
manualAddCorner();
break;
case 2:
statistics.printStatistics();
break;
case 3:
statistics.printEvents();
break;
case 4:
simulateFullMatch();
break;
case 5:
quickView();
break;
case 6:
System.out.println("👋 感谢使用,再见!");
return;
default:
System.out.println("❌ 无效选择,请重新输入!");
}
}
}
private void manualAddCorner() {
System.out.println("\n📝 手动添加角球记录");
System.out.print("输入比赛分钟数(1-90): ");
int minute = scanner.nextInt();
scanner.nextLine();
System.out.print("输入球队(主队/客队): ");
String team = scanner.nextLine();
System.out.print("输入执行球员: ");
String player = scanner.nextLine();
System.out.print("是否进球(y/n): ");
String scoredStr = scanner.nextLine();
boolean scored = scoredStr.equalsIgnoreCase("y");
statistics.addCorner(team, minute, player, scored);
System.out.println("✅ 角球记录已添加!");
// 添加后立即显示最新统计
statistics.printStatistics();
}
private void simulateFullMatch() {
System.out.print("请输入比赛总时长(分钟): ");
int duration = scanner.nextInt();
scanner.nextLine();
System.out.println("🎮 开始模拟比赛...");
DataSimulator.simulateMatch(statistics, duration);
System.out.println("🏁 比赛结束!");
statistics.printStatistics();
}
private void quickView() {
String leading = statistics.getLeadingTeam();
int count = statistics.getLeadCount();
System.out.println("\n📊 快速领先查看:");
if ("平局".equals(leading)) {
System.out.println("🤝 目前平局,谁也领先谁!");
} else {
System.out.printf("🔝 %s领先 %d 个角球\n", leading, count);
if (statistics.isLeadingByMoreThan(5)) {
System.out.println("💪 差距较大,领先优势明显!");
} else if (count <= 2) {
System.out.println("⚔️ 比赛非常接近!");
}
System.out.printf("落后方还需 %d 个角球追平\n",
statistics.getNeededToTie());
}
}
}
// 主程序入口
public static void main(String[] args) {
// 简单演示模式
if (args.length > 0 && args[0].equals("-demo")) {
runDemo();
} else {
// 完整交互模式
ConsoleUI ui = new ConsoleUI();
ui.start();
}
}
// 演示模式
private static void runDemo() {
System.out.println("═══════════════════════════════════════");
System.out.println(" ⚽ 角球统计演示模式 ⚽");
System.out.println("═══════════════════════════════════════");
MatchInfo match = new MatchInfo("巴塞罗那", "皇家马德里",
LocalDateTime.now(), "诺坎普球场");
System.out.println(match);
CornerStatistic stats = new CornerStatistic();
// 模拟一场90分钟的比赛
System.out.println("\n⏰ 比赛正式开始!");
// 手动添加一些角球记录进行演示
Random random = new Random();
String[] playersHome = {"梅西", "苏亚雷斯", "格里兹曼", "库蒂尼奥", "德容"};
String[] playersAway = {"本泽马", "阿扎尔", "维尼修斯", "巴尔韦德", "莫德里奇"};
for (int minute = 1; minute <= 90; minute += random.nextInt(5) + 1) {
String team = random.nextBoolean() ? "主队" : "客队";
String player;
if (team.equals("主队")) {
player = playersHome[random.nextInt(playersHome.length)];
} else {
player = playersAway[random.nextInt(playersAway.length)];
}
boolean scored = random.nextInt(100) < 3;
stats.addCorner(team, minute, player, scored);
if (scored) {
System.out.printf("⚽ GOAL! %d分钟 - %s队 %s 角球直接破门!\n",
minute, team, player);
}
}
// 显示最终统计结果
System.out.println("\n🏁 比赛结束!最终结果:");
System.out.println("═══════════════════════════════════════");
stats.printStatistics();
stats.printEvents();
// 显示领先情况
String leading = stats.getLeadingTeam();
System.out.println("\n📊 领先分析:");
if ("平局".equals(leading)) {
System.out.println("🤝 双方角球数相同,比赛势均力敌!");
} else if (leading.equals("主队")) {
System.out.printf("🏆 巴塞罗那(主队)角球领先 %d 个!\n", stats.getLeadCount());
} else {
System.out.printf("🏆 皇家马德里(客队)角球领先 %d 个!\n", stats.getLeadCount());
}
}
}
运行方式
完整交互模式
javac CornerKickStatistics.java java CornerKickStatistics
快速演示模式
java CornerKickStatistics -demo
功能特点
📊 核心功能
- 实时统计 - 记录每队角球数并实时更新
- 领先检测 - 自动判断哪方领先
- 领先分析 - 显示领先数量和差距
🎮 扩展功能
- 手动记录 - 方便现场录入
- 自动模拟 - 模拟整场比赛
- 事件追溯 - 查看所有角球事件
- 快速查询 - 一键查看领先情况
🛠 设计优势
- 面向对象设计,模块清晰
- 数据持久化能力
- 支持扩展(如比分、黄牌等)
- 良好的用户体验
输出示例
═══════════════════════════════════════
角球统计报告
═══════════════════════════════════════
主队角球数: 8
客队角球数: 5
总角球数: 13
-------------------------------------
🏆 主队领先 3 个角球!
═══════════════════════════════════════
这个系统可以根据实际需求进行扩展,比如添加更多统计数据、数据库存储、图表展示等功能。