java案例统计冲刺跑次数谁更多?

wen java案例 1

Java 案例:统计冲刺跑次数谁更多

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

java案例统计冲刺跑次数谁更多?

需求分析

  1. 有若干运动员,每人进行多轮冲刺跑测试
  2. 每次冲刺成绩达到某个阈值(例如配速 < 4:30/km 或速度 > 6 m/s)算作一次"有效冲刺"
  3. 统计每个人有效冲刺的次数
  4. 比较谁更多

完整代码实现

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 重构的版本吗?

上一篇这个java案例怎么看老将的经验价值体现?

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝