篮球转身过人次数统计 - Java案例
下面用Java实现一个简单的转身过人次数统计程序,可以统计多名球员中谁转身过人次数最多。

场景说明
统计一场篮球比赛中,几名球员的转身过人(spin move)次数,找出次数最多的球员。
基础版(数组 + 手动统计)
import java.util.Scanner;
public class SpinMoveCounter {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入球员人数:");
int n = sc.nextInt();
String[] names = new String[n];
int[] counts = new int[n];
// 输入每个球员的姓名和转身次数
for (int i = 0; i < n; i++) {
System.out.print("请输入第" + (i + 1) + "位球员姓名:");
names[i] = sc.next();
System.out.print("请输入该球员转身过人次数:");
counts[i] = sc.nextInt();
}
// 找出最大值
int max = counts[0];
int maxIndex = 0;
for (int i = 1; i < n; i++) {
if (counts[i] > max) {
max = counts[i];
maxIndex = i;
}
}
// 输出结果
System.out.println("\n=== 转身过人统计结果 ===");
for (int i = 0; i < n; i++) {
System.out.println(names[i] + ":" + counts[i] + " 次");
}
// 考虑并列第一
System.out.print("\n转身过人次数最多的是:");
boolean first = true;
for (int i = 0; i < n; i++) {
if (counts[i] == max) {
if (!first) System.out.print("、");
System.out.print(names[i] + "(" + max + "次)");
first = false;
}
}
System.out.println();
sc.close();
}
}
运行示例
请输入球员人数:4
请输入第1位球员姓名:欧文
请输入该球员转身过人次数:8
请输入第2位球员姓名:哈登
请输入该球员转身过人次数:5
请输入第3位球员姓名:东契奇
请输入该球员转身过人次数:8
请输入第4位球员姓名:库里
请输入该球员转身过人次数:3
=== 转身过人统计结果 ===
欧文:8 次
哈登:5 次
东契奇:8 次
库里:3 次
转身过人次数最多的是:欧文(8次)、东契奇(8次)
面向对象版(推荐)
球员类
public class Player {
private String name;
private int spinCount; // 转身过人次数
public Player(String name, int spinCount) {
this.name = name;
this.spinCount = spinCount;
}
public String getName() { return name; }
public int getSpinCount() { return spinCount; }
@Override
public String toString() {
return name + ":" + spinCount + " 次";
}
}
统计工具类
import java.util.*;
import java.util.stream.Collectors;
public class SpinMoveAnalyzer {
/** 统计转身过人次数最多的球员(支持并列) */
public static List<Player> findTopPlayers(List<Player> players) {
// 找出最大次数
int max = players.stream()
.mapToInt(Player::getSpinCount)
.max()
.orElse(0);
// 过滤出所有达到最大次数的球员
return players.stream()
.filter(p -> p.getSpinCount() == max)
.collect(Collectors.toList());
}
/** 按次数从高到低排序输出 */
public static void printRanking(List<Player> players) {
System.out.println("=== 转身过人排行榜 ===");
players.stream()
.sorted(Comparator.comparingInt(Player::getSpinCount).reversed())
.forEach(p -> System.out.println(p));
}
}
测试主类
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Player> players = new ArrayList<>();
players.add(new Player("欧文", 8));
players.add(new Player("哈登", 5));
players.add(new Player("东契奇", 8));
players.add(new Player("库里", 3));
players.add(new Player("保罗", 6));
// 打印排行榜
SpinMoveAnalyzer.printRanking(players);
// 找最多的人
List<Player> tops = SpinMoveAnalyzer.findTopPlayers(players);
System.out.print("\n转身过人最多的是:");
tops.forEach(p -> System.out.print(p.getName() + "(" + p.getSpinCount() + "次) "));
System.out.println();
}
}
输出结果
=== 转身过人排行榜 ===
欧文:8 次
东契奇:8 次
保罗:6 次
哈登:5 次
库里:3 次
转身过人最多的是:欧文(8次) 东契奇(8次)
统计某球员累计次数(进阶)
如果需要统计某球员整场比赛每次转身过人的记录,例如从一系列动作中统计:
import java.util.*;
import java.util.stream.Collectors;
public class ActionStats {
public static void main(String[] args) {
// 模拟一场比赛中所有球员的动作记录
String[] actions = {
"欧文:转身", "欧文:三分", "东契奇:转身", "欧文:转身",
"哈登:转身", "东契奇:转身", "欧文:上篮", "哈登:转身",
"东契奇:转身", "欧文:转身"
};
// 统计每个球员转身次数
Map<String, Long> spinMap = Arrays.stream(actions)
.filter(a -> a.endsWith(":转身"))
.map(a -> a.split(":")[0])
.collect(Collectors.groupingBy(name -> name, Collectors.counting()));
// 输出统计
spinMap.forEach((name, cnt) ->
System.out.println(name + " 转身过人次数:" + cnt));
// 找最多的人
String king = spinMap.entrySet().stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.orElse("无");
System.out.println("\n转身过人王是:" + king
+ "(" + spinMap.get(king) + "次)");
}
}
输出
欧文 转身过人次数:4
东契奇 转身过人次数:3
哈登 转身过人次数:2
转身过人王是:欧文(4次)
| 技术点 | 说明 |
|---|---|
int[] 数组 |
基础版存储次数,手动比较 |
| 最大值查找 | 遍历比较,可处理并列情况 |
Player 类 |
面向对象封装 |
Stream API |
filter/map/max/sorted/collect |
Collectors.groupingBy |
按球员分组计数 |
Comparator |
排序比较器 |
扩展方向
- 从文件/数据库读取数据:改为读取 CSV 或 JDBC 查询。
- 图形化界面:Swing / JavaFX 显示统计图。
- 多维度统计:转身次数 + 成功率 + 得分效率。
- 并列第一处理:如方案一/二所示,用 List 收集所有最大值球员。
如果你需要针对某个具体场景(比如从文件读取、接入数据库、GUI展示)的代码,告诉我,我可以进一步扩展。