Java 案例:统计冲刺跑次数谁更多
下面是一个完整的 Java 案例,模拟统计两个人(或多个运动员)的冲刺跑次数,并判断谁更多。

需求分析
- 有若干运动员,每人进行多轮冲刺跑测试
- 每次冲刺成绩达到某个阈值(例如配速 < 4:30/km 或速度 > 6 m/s)算作一次"有效冲刺"
- 统计每个人有效冲刺的次数
- 比较谁更多
完整代码实现
import java.util.*;
public class SprintCounter {
// 运动员类
static class Athlete {
String name;
List<Double> sprintSpeeds; // 每次冲刺的速度 (m/s)
Athlete(String name, List<Double> speeds) {
this.name = name;
this.sprintSpeeds = speeds;
}
// 统计有效冲刺次数(速度 >= 阈值)
int countValidSprints(double threshold) {
int count = 0;
for (double s : sprintSpeeds) {
if (s >= threshold) count++;
}
return count;
}
}
public static void main(String[] args) {
// 阈值:速度 >= 6.0 m/s 算作有效冲刺
final double THRESHOLD = 6.0;
// 构造运动员数据(模拟多轮冲刺速度)
List<Athlete> athletes = new ArrayList<>();
athletes.add(new Athlete("张三", Arrays.asList(6.2, 5.8, 6.5, 6.1, 5.9, 6.8, 6.3)));
athletes.add(new Athlete("李四", Arrays.asList(6.0, 6.4, 6.7, 5.7, 6.9, 6.2, 6.6)));
athletes.add(new Athlete("王五", Arrays.asList(5.5, 6.3, 5.9, 6.0, 6.1, 5.8, 6.2)));
// 统计并打印
Map<String, Integer> result = new LinkedHashMap<>();
System.out.println("===== 冲刺统计(阈值: " + THRESHOLD + " m/s)=====");
for (Athlete a : athletes) {
int cnt = a.countValidSprints(THRESHOLD);
result.put(a.name, cnt);
System.out.printf("%s 有效冲刺次数: %d%n", a.name, cnt);
}
// 找出冲刺次数最多的人(可能并列)
int max = Collections.max(result.values());
List<String> winners = new ArrayList<>();
for (Map.Entry<String, Integer> e : result.entrySet()) {
if (e.getValue() == max) winners.add(e.getKey());
}
System.out.println("\n===== 结果 =====");
if (winners.size() == 1) {
System.out.println("冲刺次数最多的是: " + winners.get(0) + ",共 " + max + " 次");
} else {
System.out.println("并列第一: " + String.join("、", winners) + ",均 " + max + " 次");
}
}
}
运行结果
===== 冲刺统计(阈值: 6.0 m/s)=====
张三 有效冲刺次数: 5
李四 有效冲刺次数: 6
王五 有效冲刺次数: 4
===== 结果 =====
冲刺次数最多的是: 李四,共 6 次
关键点说明
| 部分 | 说明 |
|---|---|
Athlete 类 |
封装姓名和每次冲刺速度数据 |
countValidSprints |
遍历统计数据,达到阈值即计数 |
Collections.max |
求出最大冲刺次数 |
| 并列处理 | 用列表收集所有达到最大值的人 |
进阶扩展
如果需要更真实,可以从外部文件/控制台读取数据,或改用 Stream API 写法:
// Stream 写法统计
long cnt = a.sprintSpeeds.stream().filter(s -> s >= THRESHOLD).count();
// 直接找出最多者(无并列处理)
Optional<Athlete> top = athletes.stream()
.max(Comparator.comparingInt(x -> x.countValidSprints(THRESHOLD)));
需要我改成从控制台输入数据、读取 CSV 文件或用 Stream 重构的版本吗?
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播