本文目录导读:

我来提供一个Java案例,统计两支球队的传球成功率并比较哪队更高。
完整代码实现
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* 传球成功率统计案例
* 用于比较两支球队的传球成功率
*/
public class PassSuccessRate {
// 球队类
static class Team {
private String name;
private List<Player> players;
public Team(String name) {
this.name = name;
this.players = new ArrayList<>();
}
public void addPlayer(Player player) {
players.add(player);
}
public String getName() {
return name;
}
public List<Player> getPlayers() {
return players;
}
}
// 球员类
static class Player {
private String name;
private int totalPasses; // 总传球次数
private int successfulPasses; // 成功传球次数
public Player(String name, int totalPasses, int successfulPasses) {
this.name = name;
this.totalPasses = totalPasses;
this.successfulPasses = successfulPasses;
}
public int getTotalPasses() {
return totalPasses;
}
public int getSuccessfulPasses() {
return successfulPasses;
}
public double getSuccessRate() {
if (totalPasses == 0) return 0;
return (double) successfulPasses / totalPasses * 100;
}
public String getName() {
return name;
}
}
// 统计工具类
static class Statistics {
/**
* 计算球队的传球成功率
*/
public static double calculateTeamSuccessRate(Team team) {
int totalPasses = 0;
int successfulPasses = 0;
for (Player player : team.getPlayers()) {
totalPasses += player.getTotalPasses();
successfulPasses += player.getSuccessfulPasses();
}
if (totalPasses == 0) return 0;
return (double) successfulPasses / totalPasses * 100;
}
/**
* 显示球队统计数据
*/
public static void displayTeamStats(Team team) {
System.out.println("\n=== " + team.getName() + " 统计 ===");
System.out.println("球员\t\t总传球\t成功传球\t成功率");
System.out.println("----------------------------------------");
int teamTotal = 0;
int teamSuccessful = 0;
for (Player player : team.getPlayers()) {
System.out.printf("%-10s\t%6d\t%6d\t\t%.1f%%\n",
player.getName(),
player.getTotalPasses(),
player.getSuccessfulPasses(),
player.getSuccessRate());
teamTotal += player.getTotalPasses();
teamSuccessful += player.getSuccessfulPasses();
}
System.out.println("----------------------------------------");
System.out.printf("球队合计\t%6d\t%6d\t\t%.1f%%\n",
teamTotal, teamSuccessful,
calculateTeamSuccessRate(team));
}
/**
* 比较两队的传球成功率
*/
public static void compareTeams(Team team1, Team team2) {
double rate1 = calculateTeamSuccessRate(team1);
double rate2 = calculateTeamSuccessRate(team2);
System.out.println("\n=== 比较结果 ===");
System.out.printf("%s 传球成功率: %.2f%%\n", team1.getName(), rate1);
System.out.printf("%s 传球成功率: %.2f%%\n", team2.getName(), rate2);
if (rate1 > rate2) {
System.out.printf(">>> %s 的传球成功率更高!\n", team1.getName());
} else if (rate2 > rate1) {
System.out.printf(">>> %s 的传球成功率更高!\n", team2.getName());
} else {
System.out.println(">>> 两队传球成功率相同!");
}
}
}
// 主方法 - 测试示例
public static void main(String[] args) {
System.out.println("=== 足球传球成功率统计系统 ===\n");
// 创建两支球队
Team teamA = createTeamA();
Team teamB = createTeamB();
// 显示统计信息
Statistics.displayTeamStats(teamA);
Statistics.displayTeamStats(teamB);
// 比较两队成功率
Statistics.compareTeams(teamA, teamB);
// 添加交互式示例
interactiveExample();
}
/**
* 创建A队
*/
private static Team createTeamA() {
Team team = new Team("A队");
team.addPlayer(new Player("张三", 58, 45));
team.addPlayer(new Player("李四", 62, 50));
team.addPlayer(new Player("王五", 45, 38));
team.addPlayer(new Player("赵六", 55, 48));
team.addPlayer(new Player("孙七", 40, 35));
return team;
}
/**
* 创建B队
*/
private static Team createTeamB() {
Team team = new Team("B队");
team.addPlayer(new Player("周八", 50, 40));
team.addPlayer(new Player("吴九", 65, 52));
team.addPlayer(new Player("郑十", 48, 39));
team.addPlayer(new Player("钱一", 60, 41));
team.addPlayer(new Player("陈二", 35, 25));
return team;
}
/**
* 交互式示例 - 动态输入数据
*/
private static void interactiveExample() {
System.out.println("\n\n=== 交互式测试示例 ===");
System.out.println("以下为随机生成的测试数据:");
Random random = new Random();
// 动态创建球队
Team team1 = new Team("红队");
Team team2 = new Team("蓝队");
// 为红队添加球员数据
for (int i = 1; i <= 4; i++) {
int total = 30 + random.nextInt(40); // 30-69次传球
int success = total - random.nextInt(10); // 成功数
team1.addPlayer(new Player("红队球员" + i, total, success));
}
// 为蓝队添加球员数据
for (int i = 1; i <= 4; i++) {
int total = 30 + random.nextInt(40);
int success = total - random.nextInt(15); // 稍微加点难度
team2.addPlayer(new Player("蓝队球员" + i, total, success));
}
// 显示并比较
Statistics.displayTeamStats(team1);
Statistics.displayTeamStats(team2);
Statistics.compareTeams(team1, team2);
}
}
第二种实现方式:使用Map和Lambda表达式
import java.util.*;
import java.util.stream.Collectors;
/**
* 使用现代Java特性实现的传球统计
*/
public class PassStatsModern {
static class Player {
String name;
int totalPasses;
int successfulPasses;
Player(String name, int total, int success) {
this.name = name;
this.totalPasses = total;
this.successfulPasses = success;
}
double getSuccessRate() {
return totalPasses == 0 ? 0 : (double) successfulPasses / totalPasses * 100;
}
}
public static void main(String[] args) {
// 使用Map存储球队数据
Map<String, List<Player>> teams = new HashMap<>();
// 添加球队数据
teams.put("球队A", Arrays.asList(
new Player("球员1", 55, 48),
new Player("球员2", 48, 42),
new Player("球员3", 60, 55)
));
teams.put("球队B", Arrays.asList(
new Player("球员4", 50, 40),
new Player("球员5", 65, 49),
new Player("球员6", 42, 35)
));
// 计算每队的成功率
Map<String, Double> teamRates = teams.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> {
int total = entry.getValue().stream()
.mapToInt(p -> p.totalPasses).sum();
int success = entry.getValue().stream()
.mapToInt(p -> p.successfulPasses).sum();
return total == 0 ? 0 : (double) success / total * 100;
}
));
// 找出最高成功率的球队
String bestTeam = teamRates.entrySet().stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.orElse("无");
// 输出结果
teamRates.forEach((team, rate) ->
System.out.printf("%s 成功率: %.1f%%\n", team, rate));
System.out.printf("\n成功率最高的球队是: %s (%.1f%%)",
bestTeam, teamRates.get(bestTeam));
}
}
主要功能说明
- 数据类设计:包含Team(球队)和Player(球员)类
- 统计功能:计算个人和球队的传球成功率
- 比较功能:比较不同球队的成功率高低
- 显示功能:格式化显示统计数据和比较结果
运行结果示例
=== 足球传球成功率统计系统 ===
=== A队 统计 ===
球员 总传球 成功传球 成功率
----------------------------------------
张三 58 45 77.6%
李四 62 50 80.6%
王五 45 38 84.4%
赵六 55 48 87.3%
孙七 40 35 87.5%
----------------------------------------
球队合计 260 216 83.1%
=== B队 统计 ===
球员 总传球 成功传球 成功率
----------------------------------------
周八 50 40 80.0%
吴九 65 52 80.0%
郑十 48 39 81.3%
钱一 60 41 68.3%
陈二 35 25 71.4%
----------------------------------------
球队合计 258 197 76.4%
=== 比较结果 ===
A队 传球成功率: 83.08%
B队 传球成功率: 76.36%
>>> A队 的传球成功率更高!
这个案例提供了完整的解决方案,包含了面向对象设计和现代Java特性两种实现方式,可以根据需求选择使用。