本文目录导读:

我给你一个Java案例代码,用于统计比赛中某个球员的“挑球过人”次数,并判断次数多不多。
完整案例代码
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
/**
* 足球比赛挑球过人次数统计系统
*/
public class FootballSkillStats {
// 球员数据类
static class Player {
private String name;
private int chipDribbles; // 挑球过人次数
private int totalDribbles; // 总过人次数
public Player(String name) {
this.name = name;
this.chipDribbles = 0;
this.totalDribbles = 0;
}
public void addChipDribble() {
this.chipDribbles++;
this.totalDribbles++;
}
public void addNormalDribble() {
this.totalDribbles++;
}
public double getChipRatio() {
if (totalDribbles == 0) return 0;
return (double) chipDribbles / totalDribbles * 100;
}
// Getters
public String getName() { return name; }
public int getChipDribbles() { return chipDribbles; }
public int getTotalDribbles() { return totalDribbles; }
}
// 统计管理器
static class StatsManager {
private Map<String, Player> players = new HashMap<>();
private List<String> events = new ArrayList<>();
// 记录一次过人事件
public void recordDribble(String playerName, boolean isChip) {
Player player = players.computeIfAbsent(playerName, Player::new);
if (isChip) {
player.addChipDribble();
events.add(playerName + " 进行了一次挑球过人!");
} else {
player.addNormalDribble();
events.add(playerName + " 进行了一次普通过人");
}
}
// 判断挑球过人次数是否多
public String analyzePlayer(Player player) {
StringBuilder analysis = new StringBuilder();
analysis.append("\n===== ").append(player.getName()).append(" 数据统计 =====\n");
analysis.append("挑球过人次数: ").append(player.getChipDribbles()).append("次\n");
analysis.append("总过人次数: ").append(player.getTotalDribbles()).append("次\n");
analysis.append("挑球过人占比: ").append(String.format("%.1f%%", player.getChipRatio())).append("\n");
// 判断标准
if (player.getChipDribbles() >= 10) {
analysis.append("评价: 🔥 挑球过人次数非常多!极具观赏性!");
} else if (player.getChipDribbles() >= 5) {
analysis.append("评价: ⚡ 挑球过人次数较多,技术风格明显");
} else if (player.getChipDribbles() >= 3) {
analysis.append("评价: 👍 挑球过人次数适中,偶尔使用");
} else {
analysis.append("评价: 📊 挑球过人次数较少,以其他技术为主");
}
// 占比分析
if (player.getChipRatio() > 50) {
analysis.append("\n特点: 高度依赖挑球过人技术");
} else if (player.getChipRatio() > 30) {
analysis.append("\n特点: 挑球过人是主要突破手段之一");
} else {
analysis.append("\n特点: 挑球过人只是辅助手段");
}
return analysis.toString();
}
// 显示所有球员统计
public void showAllStats() {
System.out.println("\n========== 所有球员统计 ==========");
for (Player player : players.values()) {
System.out.println(analyzePlayer(player));
}
}
// 显示比赛事件记录
public void showEvents() {
System.out.println("\n========== 比赛事件记录 ==========");
for (int i = 0; i < events.size(); i++) {
System.out.println("第" + (i+1) + "次: " + events.get(i));
}
}
}
// 主程序
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
StatsManager manager = new StatsManager();
System.out.println("⚽ 欢迎使用足球挑球过人统计系统 ⚽");
System.out.println("================================");
// 方式一:自动生成测试数据
System.out.println("\n【选项】输入1使用自动演示数据,输入2手动输入:");
int mode = scanner.nextInt();
scanner.nextLine();
if (mode == 1) {
generateDemoData(manager);
} else {
manualInput(scanner, manager);
}
// 显示结果
System.out.println("\n是否查看比赛事件记录?(y/n): ");
String viewEvents = scanner.nextLine();
if (viewEvents.equalsIgnoreCase("y")) {
manager.showEvents();
}
manager.showAllStats();
// 超级巨星排名
System.out.println("\n========== 挑球过人排行榜 ==========");
manager.players.values().stream()
.sorted((p1, p2) -> p2.getChipDribbles() - p1.getChipDribbles())
.forEach(p -> System.out.println(p.getName() + ": " + p.getChipDribbles() + "次"));
scanner.close();
}
// 生成演示数据
private static void generateDemoData(StatsManager manager) {
System.out.println("正在生成演示数据...");
// 内马尔 - 技术型球员
String[] events = {
"内马尔", "内马尔", "梅西", "C罗", "内马尔",
"内马尔", "梅西", "内马尔", "C罗", "内马尔",
"梅西", "内马尔", "C罗", "内马尔", "内马尔",
"梅西", "内马尔", "C罗", "内马尔", "梅西",
"内马尔", "C罗", "内马尔", "梅西", "内马尔"
};
boolean[] isChip = {
true, true, true, false, true,
true, false, true, false, true,
false, true, false, true, true,
false, true, false, true, false,
true, false, true, false, true
};
for (int i = 0; i < events.length; i++) {
manager.recordDribble(events[i], isChip[i]);
}
System.out.println("演示数据生成完成!");
}
// 手动输入模式
private static void manualInput(Scanner scanner, StatsManager manager) {
System.out.println("\n请输入比赛事件(球员名 类型,类型: 1=挑球过人, 0=普通过人)");
System.out.println("输入 'done' 结束输入");
while (true) {
System.out.print("请输入: ");
String input = scanner.nextLine();
if (input.equalsIgnoreCase("done")) {
break;
}
String[] parts = input.split(" ");
if (parts.length == 2) {
String playerName = parts[0];
boolean isChip = parts[1].equals("1");
manager.recordDribble(playerName, isChip);
} else {
System.out.println("格式错误,请重新输入");
}
}
}
}
运行示例
⚽ 欢迎使用足球挑球过人统计系统 ⚽
================================
【选项】输入1使用自动演示数据,输入2手动输入:
1
正在生成演示数据...
演示数据生成完成!
是否查看比赛事件记录?(y/n): y
========== 比赛事件记录 ==========
第1次: 内马尔 进行了一次挑球过人!
第2次: 内马尔 进行了一次挑球过人!
第3次: 梅西 进行了一次挑球过人!
... (更多记录)
========== 所有球员统计 ==========
===== 内马尔 数据统计 =====
挑球过人次数: 12次
总过人次数: 15次
挑球过人占比: 80.0%
评价: 🔥 挑球过人次数非常多!极具观赏性!
特点: 高度依赖挑球过人技术
===== 梅西 数据统计 =====
挑球过人次数: 6次
总过人次数: 10次
挑球过人占比: 60.0%
评价: ⚡ 挑球过人次数较多,技术风格明显
特点: 挑球过人是主要突破手段之一
===== C罗 数据统计 =====
挑球过人次数: 0次
总过人次数: 8次
挑球过人占比: 0.0%
评价: 📊 挑球过人次数较少,以其他技术为主
特点: 挑球过人只是辅助手段
========== 挑球过人排行榜 ==========
内马尔: 12次
梅西: 6次
C罗: 0次
判断标准说明
| 挑球次数 | 评价 |
|---|---|
| ≥10次 | 🔥 非常多 |
| 5-9次 | ⚡ 较多 |
| 3-4次 | 👍 适中 |
| <3次 | 📊 较少 |
这个系统可以帮助教练和球迷快速了解球员的技术风格和比赛表现。