本文目录导读:

我来为您设计一个Java程序,用于统计两支球队比赛中红黄牌数量并比较哪队更多。
完整代码实现
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class CardStatistics {
// 定义牌的类型常量
static final String YELLOW_CARD = "黄牌";
static final String RED_CARD = "红牌";
// 球队类
static class Team {
String name;
int yellowCards;
int redCards;
public Team(String name) {
this.name = name;
this.yellowCards = 0;
this.redCards = 0;
}
// 计算总罚牌数
public int getTotalCards() {
return yellowCards + redCards;
}
// 计算罚牌加权分(黄牌1分,红牌2分)
public int getCardScore() {
return yellowCards + redCards * 2;
}
}
// 球员类
static class Player {
String name;
int number;
String team;
Map<String, Integer> cards = new HashMap<>();
public Player(String name, int number, String team) {
this.name = name;
this.number = number;
this.team = team;
cards.put("黄牌", 0);
cards.put("红牌", 0);
}
public void addCard(String cardType) {
cards.put(cardType, cards.get(cardType) + 1);
}
}
// 比赛记录类
static class MatchRecord {
String team;
String playerName;
String cardType;
public MatchRecord(String team, String playerName, String cardType) {
this.team = team;
this.playerName = playerName;
this.cardType = cardType;
}
}
public static void main(String[] args) {
List<MatchRecord> records = new ArrayList<>();
Map<String, Team> teams = new HashMap<>();
Map<String, Player> players = new HashMap<>();
Scanner scanner = new Scanner(System.in);
System.out.println("=== 足球比赛红黄牌统计系统 ===");
System.out.println("请输入球队信息(格式:队名 如:江苏队)");
System.out.print("请输入主队名称:");
String homeTeam = scanner.nextLine();
System.out.print("请输入客队名称:");
String awayTeam = scanner.nextLine();
teams.put(homeTeam, new Team(homeTeam));
teams.put(awayTeam, new Team(awayTeam));
System.out.println("\n请输入比赛事件记录(输入'end'结束)");
System.out.println("格式:球队 球员姓名 球员号码 牌类型(黄牌/红牌)");
System.out.println("示例:江苏队 张三 10 黄牌");
// 输入比赛事件
while (true) {
System.out.print("请输入:");
String input = scanner.nextLine();
if (input.equalsIgnoreCase("end")) {
break;
}
String[] parts = input.split(" ");
if (parts.length != 4) {
System.out.println("输入格式错误,请重新输入!");
continue;
}
String teamName = parts[0];
String playerName = parts[1];
int playerNumber = Integer.parseInt(parts[2]);
String cardType = parts[3];
// 检查牌类型是否有效
if (!cardType.equals("黄牌") && !cardType.equals("红牌")) {
System.out.println("无效的牌类型,请输入'黄牌'或'红牌'!");
continue;
}
// 检查球队是否存在
if (!teams.containsKey(teamName)) {
System.out.println("球队不存在,请确认队名!");
continue;
}
// 记录比赛事件
records.add(new MatchRecord(teamName, playerName, cardType));
// 更新球队统计
Team team = teams.get(teamName);
if (cardType.equals("黄牌")) {
team.yellowCards++;
} else if (cardType.equals("红牌")) {
team.redCards++;
}
// 更新球员统计
String playerKey = teamName + "-" + playerName + "-" + playerNumber;
Player player = players.getOrDefault(playerKey,
new Player(playerName, playerNumber, teamName));
player.addCard(cardType);
players.put(playerKey, player);
}
scanner.close();
// 输出统计结果
printStatistics(teams, players, records);
// 比较哪队红黄牌更多
compareTeams(teams.get(homeTeam), teams.get(awayTeam));
}
// 打印统计信息
private static void printStatistics(Map<String, Team> teams,
Map<String, Player> players,
List<MatchRecord> records) {
System.out.println("\n===== 比赛统计报告 =====");
// 各队统计
System.out.println("\n【球队红黄牌统计】");
for (Team team : teams.values()) {
System.out.println(team.name + ":");
System.out.println(" 黄牌: " + team.yellowCards + " 张");
System.out.println(" 红牌: " + team.redCards + " 张");
System.out.println(" 总牌数: " + team.getTotalCards() + " 张");
System.out.println(" 加权分: " + team.getCardScore() + " 分");
System.out.println();
}
// 球员统计
System.out.println("\n【球员红黄牌统计】");
for (Player player : players.values()) {
System.out.println(player.team + " - " + player.name +
" (" + player.number + "号): " +
"黄牌 " + player.cards.get("黄牌") + " 张, " +
"红牌 " + player.cards.get("红牌") + " 张");
}
// 比赛记录
System.out.println("\n【比赛事件记录】");
for (int i = 0; i < records.size(); i++) {
MatchRecord record = records.get(i);
System.out.println((i + 1) + ". " + record.team +
" " + record.playerName +
" " + record.cardType);
}
}
// 比较两队红黄牌数量
private static void compareTeams(Team team1, Team team2) {
System.out.println("\n===== 红黄牌对比 =====");
// 比较黄牌
System.out.println("【黄牌数量对比】");
System.out.println(team1.name + " 黄牌: " + team1.yellowCards);
System.out.println(team2.name + " 黄牌: " + team2.yellowCards);
if (team1.yellowCards > team2.yellowCards) {
System.out.println("→ " + team1.name + " 黄牌更多");
} else if (team1.yellowCards < team2.yellowCards) {
System.out.println("→ " + team2.name + " 黄牌更多");
} else {
System.out.println("→ 两队黄牌数量相同");
}
// 比较红牌
System.out.println("\n【红牌数量对比】");
System.out.println(team1.name + " 红牌: " + team1.redCards);
System.out.println(team2.name + " 红牌: " + team2.redCards);
if (team1.redCards > team2.redCards) {
System.out.println("→ " + team1.name + " 红牌更多");
} else if (team1.redCards < team2.redCards) {
System.out.println("→ " + team2.name + " 红牌更多");
} else {
System.out.println("→ 两队红牌数量相同");
}
// 比较总牌数
System.out.println("\n【总牌数对比】");
System.out.println(team1.name + " 总牌数: " + team1.getTotalCards());
System.out.println(team2.name + " 总牌数: " + team2.getTotalCards());
if (team1.getTotalCards() > team2.getTotalCards()) {
System.out.println("→ " + team1.name + " 红黄牌总数更多");
} else if (team1.getTotalCards() < team2.getTotalCards()) {
System.out.println("→ " + team2.name + " 红黄牌总数更多");
} else {
System.out.println("→ 两队红黄牌总数相同");
}
// 比较加权分
System.out.println("\n【惩罚加权分对比】(黄牌1分,红牌2分)");
System.out.println(team1.name + " 加权分: " + team1.getCardScore());
System.out.println(team2.name + " 加权分: " + team2.getCardScore());
if (team1.getCardScore() > team2.getCardScore()) {
System.out.println("→ " + team1.name + " 惩罚更严重");
} else if (team1.getCardScore() < team2.getCardScore()) {
System.out.println("→ " + team2.name + " 惩罚更严重");
} else {
System.out.println("→ 两队惩罚严重程度相同");
}
// 最终结论
System.out.println("\n【最终结论】");
int team1Total = team1.getCardScore();
int team2Total = team2.getCardScore();
if (team1Total > team2Total) {
System.out.println("🏆 " + team1.name + " 红黄牌更多!");
} else if (team1Total < team2Total) {
System.out.println("🏆 " + team2.name + " 红黄牌更多!");
} else {
System.out.println("⚖️ 两队红黄牌数量持平!");
}
}
}
程序运行示例
=== 足球比赛红黄牌统计系统 ===
请输入球队信息(格式:队名 如:江苏队)
请输入主队名称:江苏队
请输入客队名称:浙江队
请输入比赛事件记录(输入'end'结束)
格式:球队 球员姓名 球员号码 牌类型(黄牌/红牌)
示例:江苏队 张三 10 黄牌
请输入:江苏队 张三 10 黄牌
请输入:江苏队 李四 8 黄牌
请输入:浙江队 王五 7 红牌
请输入:江苏队 小明 11 黄牌
请输入:浙江队 刘六 9 黄牌
请输入:end
===== 比赛统计报告 =====
【球队红黄牌统计】
江苏队:
黄牌: 3 张
红牌: 0 张
总牌数: 3 张
加权分: 3 分
浙江队:
黄牌: 1 张
红牌: 1 张
总牌数: 2 张
加权分: 3 分
【球员红黄牌统计】
江苏队 - 张三 (10号): 黄牌 1 张, 红牌 0 张
江苏队 - 李四 (8号): 黄牌 1 张, 红牌 0 张
浙江队 - 王五 (7号): 黄牌 0 张, 红牌 1 张
浙江队 - 刘六 (9号): 黄牌 1 张, 红牌 0 张
江苏队 - 小明 (11号): 黄牌 1 张, 红牌 0 张
【比赛事件记录】
1. 江苏队 张三 黄牌
2. 江苏队 李四 黄牌
3. 浙江队 王五 红牌
4. 江苏队 小明 黄牌
5. 浙江队 刘六 黄牌
===== 红黄牌对比 =====
【黄牌数量对比】
江苏队 黄牌: 3
浙江队 黄牌: 1
→ 江苏队 黄牌更多
【红牌数量对比】
江苏队 红牌: 0
浙江队 红牌: 1
→ 浙江队 红牌更多
【总牌数对比】
江苏队 总牌数: 3
浙江队 总牌数: 2
→ 江苏队 红黄牌总数更多
【惩罚加权分对比】(黄牌1分,红牌2分)
江苏队 加权分: 3
浙江队 加权分: 3
→ 两队惩罚严重程度相同
【最终结论】
⚖️ 两队红黄牌数量持平!
主要功能说明
- 数据录入:支持手动输入比赛事件
- 多维度统计:可比较黄牌、红牌、总牌数和加权分
- 球员统计:记录每位球员的红黄牌情况
- 灵活比较:支持不同维度的比较
- 加权计算:红牌权重高于黄牌(红牌2分,黄牌1分)
这个程序可以根据您的需求灵活调整,比如添加联赛统计、赛季统计等功能。