本文目录导读:

我来为您设计一个Java程序,用于统计两队比赛中的失误次数,并比较哪队失误更少。
解决方案
import java.util.*;
public class TurnoverStatistics {
// 队伍类
static class Team {
private String name;
private int totalTurnovers;
private Map<String, Integer> turnoversByPlayer;
public Team(String name) {
this.name = name;
this.totalTurnovers = 0;
this.turnoversByPlayer = new HashMap<>();
}
public void addTurnover(String playerName) {
totalTurnovers++;
turnoversByPlayer.merge(playerName, 1, Integer::sum);
}
public String getName() {
return name;
}
public int getTotalTurnovers() {
return totalTurnovers;
}
public Map<String, Integer> getTurnoversByPlayer() {
return turnoversByPlayer;
}
// 获取失误最多的球员
public String getHighestTurnoverPlayer() {
return turnoversByPlayer.entrySet().stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.orElse("无");
}
}
// 统计比较器
public static void compareTeams(Team teamA, Team teamB) {
System.out.println("========== 失误统计对比 ==========");
System.out.println(teamA.getName() + " 总失误: " + teamA.getTotalTurnovers() + " 次");
System.out.println(teamB.getName() + " 总失误: " + teamB.getTotalTurnovers() + " 次");
System.out.println("--------------------------------");
if (teamA.getTotalTurnovers() < teamB.getTotalTurnovers()) {
System.out.println("🏆 " + teamA.getName() + " 失误更少,表现更好!");
} else if (teamB.getTotalTurnovers() < teamA.getTotalTurnovers()) {
System.out.println("🏆 " + teamB.getName() + " 失误更少,表现更好!");
} else {
System.out.println("⚖️ 两队失误次数相同,打成平手!");
}
System.out.println("--------------------------------");
System.out.println(teamA.getName() + " 失误最多的球员: " +
teamA.getHighestTurnoverPlayer() + " (" +
teamA.getTurnoversByPlayer().getOrDefault(teamA.getHighestTurnoverPlayer(), 0) + " 次)");
System.out.println(teamB.getName() + " 失误最多的球员: " +
teamB.getHighestTurnoverPlayer() + " (" +
teamB.getTurnoversByPlayer().getOrDefault(teamB.getHighestTurnoverPlayer(), 0) + " 次)");
}
// 生成模拟数据
public static void simulateMatch(Team teamA, Team teamB) {
Random random = new Random();
String[] playersA = {"球员A1", "球员A2", "球员A3", "球员A4", "球员A5"};
String[] playersB = {"球员B1", "球员B2", "球员B3", "球员B4", "球员B5"};
// 模拟4节比赛,每节随机产生失误
for (int quarter = 1; quarter <= 4; quarter++) {
int turnoversA = random.nextInt(6); // 0-5次失误
int turnoversB = random.nextInt(6);
for (int i = 0; i < turnoversA; i++) {
teamA.addTurnover(playersA[random.nextInt(playersA.length)]);
}
for (int i = 0; i < turnoversB; i++) {
teamB.addTurnover(playersB[random.nextInt(playersB.length)]);
}
System.out.println("第" + quarter + "节: " +
teamA.getName() + " " + turnoversA + " 次失误, " +
teamB.getName() + " " + turnoversB + " 次失误");
}
}
// 主方法
public static void main(String[] args) {
// 创建两支球队
Team teamA = new Team("湖人队");
Team teamB = new Team("勇士队");
System.out.println("=== 比赛失误统计系统 ===");
System.out.println("正在模拟比赛数据...");
System.out.println();
// 模拟比赛
simulateMatch(teamA, teamB);
System.out.println();
// 对比统计结果
compareTeams(teamA, teamB);
// 详细统计显示
System.out.println("\n========== 详细统计 ==========");
printTeamStats(teamA);
printTeamStats(teamB);
}
// 打印队伍详细统计
private static void printTeamStats(Team team) {
System.out.println(team.getName() + " 球员失误详情:");
team.getTurnoversByPlayer().entrySet().stream()
.sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
.forEach(entry ->
System.out.println(" " + entry.getKey() + ": " + entry.getValue() + " 次"));
System.out.println();
}
}
扩展版本(支持手动输入)
import java.util.*;
public class TurnoverManager {
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("🏀 篮球比赛失误统计系统");
System.out.println("============================");
// 输入两队名称
System.out.print("请输入A队名称: ");
String teamAName = scanner.nextLine();
System.out.print("请输入B队名称: ");
String teamBName = scanner.nextLine();
// 创建队伍
Team teamA = new Team(teamAName);
Team teamB = new Team(teamBName);
// 输入失误次数
inputTurnovers(teamA, "A");
inputTurnovers(teamB, "B");
// 比较结果
compareTeams(teamA, teamB);
scanner.close();
}
private static void inputTurnovers(Team team, String teamLabel) {
System.out.println("\n请输入" + teamLabel + "队(" + team.getName() + ")的失误数据:");
while (true) {
System.out.print("输入球员名称(输入quit结束): ");
String playerName = scanner.nextLine();
if (playerName.equalsIgnoreCase("quit")) {
break;
}
System.out.print("输入失误次数: ");
try {
int times = Integer.parseInt(scanner.nextLine());
for (int i = 0; i < times; i++) {
team.addTurnover(playerName);
}
System.out.println("✓ 已记录");
} catch (NumberFormatException e) {
System.out.println("❌ 输入无效,请重新输入");
}
}
}
private static void compareTeams(Team teamA, Team teamB) {
System.out.println("\n========== 统计结果 ==========");
System.out.printf("%s: %d 次失误%n", teamA.getName(), teamA.getTotalTurnovers());
System.out.printf("%s: %d 次失误%n", teamB.getName(), teamB.getTotalTurnovers());
String result = teamA.getTotalTurnovers() < teamB.getTotalTurnovers() ?
teamA.getName() :
(teamB.getTotalTurnovers() < teamA.getTotalTurnovers() ?
teamB.getName() : "平局");
System.out.println("============================");
System.out.println("失误更少的团队: " + result);
// 显示每个球员的失误统计
System.out.println("\n--- 球员明细 ---");
displayPlayerStats(teamA);
displayPlayerStats(teamB);
}
private static void displayPlayerStats(Team team) {
System.out.println(team.getName() + ":");
team.getTurnoversByPlayer().forEach((player, count) ->
System.out.println(" " + player + ": " + count + "次"));
}
}
运行示例
=== 比赛失误统计系统 ===
正在模拟比赛数据...
第1节: 湖人队 2 次失误, 勇士队 3 次失误
第2节: 湖人队 4 次失误, 勇士队 2 次失误
第3节: 湖人队 1 次失误, 勇士队 3 次失误
第4节: 湖人队 3 次失误, 勇士队 2 次失误
========== 失误统计对比 ==========
湖人队 总失误: 10 次
勇士队 总失误: 10 次
--------------------------------
⚖️ 两队失误次数相同,打成平手!
--------------------------------
湖人队 失误最多的球员: 球员A3 (3 次)
勇士队 失误最多的球员: 球员B2 (3 次)
========== 详细统计 ==========
湖人队 球员失误详情:
球员A3: 3 次
球员A1: 2 次
球员A4: 2 次
...
这个程序提供了完整的篮球比赛失误统计功能,可以灵活适应不同的使用场景!