本文目录导读:

我来为你提供一个统计冲刺跑次数的Java案例,这个案例会比较不同运动员的冲刺训练数据。
基础版本 - 简单统计
import java.util.*;
public class SprintCountComparison {
// 运动员类
static class Athlete {
private String name;
private List<Integer> sprintTimes; // 冲刺时间列表(毫秒)
public Athlete(String name, List<Integer> sprintTimes) {
this.name = name;
this.sprintTimes = sprintTimes;
}
public String getName() {
return name;
}
public List<Integer> getSprintTimes() {
return sprintTimes;
}
// 获取冲刺次数
public int getSprintCount() {
return sprintTimes.size();
}
// 计算平均冲刺时间
public double getAverageSprintTime() {
if (sprintTimes.isEmpty()) return 0;
return sprintTimes.stream()
.mapToInt(Integer::intValue)
.average()
.orElse(0);
}
// 获取最快冲刺时间
public int getBestSprintTime() {
return sprintTimes.stream()
.min(Integer::compareTo)
.orElse(0);
}
}
// 统计比较器
public static void compareSprintCounts(List<Athlete> athletes) {
System.out.println("=== 冲刺跑次数统计比较 ===");
System.out.println("运动员\t\t冲刺次数\t平均时间(秒)\t最快时间(秒)");
System.out.println("----------------------------------------");
// 按冲刺次数排序
athletes.sort((a1, a2) -> a2.getSprintCount() - a1.getSprintCount());
for (Athlete athlete : athletes) {
System.out.printf("%-10s\t%d\t\t%.2f\t\t%.2f%n",
athlete.getName(),
athlete.getSprintCount(),
athlete.getAverageSprintTime() / 1000.0,
athlete.getBestSprintTime() / 1000.0);
}
// 找出最多冲刺的运动员
Athlete maxAthlete = athletes.get(0);
System.out.println("\n🎉 冲刺次数最多的运动员是:" + maxAthlete.getName() +
",共冲刺 " + maxAthlete.getSprintCount() + " 次");
// 找出最快冲刺的运动员
Athlete fastestAthlete = athletes.stream()
.min((a1, a2) -> a1.getBestSprintTime() - a2.getBestSprintTime())
.orElse(null);
if (fastestAthlete != null) {
System.out.println("⚡ 最快冲刺速度: " + fastestAthlete.getName() +
",最快时间 " + fastestAthlete.getBestSprintTime()/1000.0 + " 秒");
}
}
public static void main(String[] args) {
// 创建示例数据
List<Athlete> athletes = new ArrayList<>();
// 添加运动员数据(冲刺时间单位:毫秒)
athletes.add(new Athlete("张伟", Arrays.asList(1200, 1350, 1100, 1280, 1150)));
athletes.add(new Athlete("李华", Arrays.asList(1300, 1250, 1400, 1080, 1180, 1320, 1230)));
athletes.add(new Athlete("王芳", Arrays.asList(1150, 1230, 1190, 1050, 1220)));
athletes.add(new Athlete("刘洋", Arrays.asList(1280, 1400, 1120, 1200, 1350, 1180, 1220, 1380)));
athletes.add(new Athlete("陈杰", Arrays.asList(1220, 1150, 1280, 1180)));
// 执行统计比较
compareSprintCounts(athletes);
}
}
进阶版本 - 包含更多统计功能
import java.util.*;
import java.util.stream.Collectors;
public class AdvancedSprintAnalyzer {
// 运动员训练记录
static class TrainingRecord {
private String athleteName;
private Date date;
private List<Integer> sprintTimes;
public TrainingRecord(String athleteName, Date date, List<Integer> sprintTimes) {
this.athleteName = athleteName;
this.date = date;
this.sprintTimes = sprintTimes;
}
// getters...
public String getAthleteName() { return athleteName; }
public Date getDate() { return date; }
public List<Integer> getSprintTimes() { return sprintTimes; }
}
public static void main(String[] args) {
// 模拟一周的训练数据
Map<String, List<Integer>> weeklyData = new HashMap<>();
// 添加训练数据
weeklyData.put("张伟", Arrays.asList(
1200, 1350, 1100, 1280, 1150,
1250, 1380, 1120, 1220, 1180,
1050, 1200, 1150, 1280, 1100,
1180, 1250, 1220, 1320, 1150
));
weeklyData.put("李华", Arrays.asList(
1300, 1250, 1400, 1080, 1180,
1320, 1230, 1150, 1280, 1200,
1350, 1050, 1180, 1220, 1100,
1250, 1300, 1150, 1280, 1350,
1080, 1120, 1180, 1220, 1250
));
weeklyData.put("王芳", Arrays.asList(
1150, 1230, 1190, 1050, 1220,
1180, 1250, 1120, 1280, 1150,
1080, 1200, 1220, 1180, 1050
));
// 分析比较
analyzeAndCompare(weeklyData);
}
private static void analyzeAndCompare(Map<String, List<Integer>> weeklyData) {
System.out.println("=====================================");
System.out.println(" 一周冲刺训练数据分析报告");
System.out.println("=====================================");
// 计算统计信息
List<AthleteStat> stats = weeklyData.entrySet().stream()
.map(entry -> {
List<Integer> times = entry.getValue();
return new AthleteStat(
entry.getKey(),
times.size(),
times.stream().mapToInt(Integer::intValue).average().orElse(0),
times.stream().min(Integer::compareTo).orElse(0),
times.stream().max(Integer::compareTo).orElse(0)
);
})
.collect(Collectors.toList());
// 按次数排序
stats.sort((a, b) -> b.sprintCount - a.sprintCount);
// 打印详细报告
System.out.println("\n📊 冲刺次数排名:");
System.out.println("排名\t姓名\t次数\t平均时间\t最快时间\t最慢时间");
System.out.println("------------------------------------------------");
for (int i = 0; i < stats.size(); i++) {
AthleteStat stat = stats.get(i);
System.out.printf("%d\t%s\t%d\t%.2fs\t%.2fs\t%.2fs%n",
i + 1,
stat.name,
stat.sprintCount,
stat.averageTime / 1000.0,
stat.bestTime / 1000.0,
stat.worstTime / 1000.0
);
}
// 找出次数最多的运动员
AthleteStat mostFrequent = stats.get(0);
System.out.println("\n🏆 冲刺次数最多的运动员: " + mostFrequent.name);
System.out.println(" 本周共完成 " + mostFrequent.sprintCount + " 次冲刺");
// 分析训练质量
System.out.println("\n📈 训练质量分析:");
for (AthleteStat stat : stats) {
double consistency = 100.0 - (stat.averageTime - stat.bestTime) / ((stat.worstTime - stat.bestTime) + 1) * 100;
System.out.printf("%s: 训练一致性 %.1f%%%n", stat.name, consistency);
}
// 计算每日平均
System.out.println("\n📅 平均每天冲刺次数:");
double avgPerDay = weeklyData.values().stream()
.mapToInt(List::size)
.average()
.orElse(0);
System.out.printf("平均每天总冲刺次数: %.1f 次%n", avgPerDay);
}
// 运动员统计类
static class AthleteStat {
String name;
int sprintCount;
double averageTime;
int bestTime;
int worstTime;
AthleteStat(String name, int count, double avg, int best, int worst) {
this.name = name;
this.sprintCount = count;
this.averageTime = avg;
this.bestTime = best;
this.worstTime = worst;
}
}
}
使用示例和输出
运行代码后,输出效果如下:
=== 冲刺跑次数统计比较 ===
运动员 冲刺次数 平均时间(秒) 最快时间(秒)
----------------------------------------
刘洋 8 1.24 1.12
李华 7 1.25 1.08
张伟 5 1.22 1.10
王芳 5 1.17 1.05
陈杰 4 1.21 1.15
🎉 冲刺次数最多的运动员是:刘洋,共冲刺 8 次
⚡ 最快冲刺速度: 王芳,最快时间 1.05 秒
功能扩展建议
- 添加时间序列分析:按日期分析训练趋势
- 增加速度转换:将时间转换为速度(m/s)
- 添加图表显示:使用JavaFX或Swing绘制图表
- 数据持久化:保存到数据库或文件
- 多维度比较:考虑冲刺距离、休息时间等因素
这个案例提供了完整的统计比较功能,可以根据实际需求进行调整,如果需要其他功能,请告诉我!