Java系统实现运动员每日往返行程时间记录与计算的技术咨询
解决运动员往返训练时间记录的问题
嗨,我来帮你搞定这个需求!你现在的代码只用了一个数组存储单程时间,确实没法区分往返的出发/到达,也没法对应到具体运动员和每天的训练。咱们可以用面向对象的思路来重构代码,把每个训练记录的信息封装起来,这样就能轻松记录每日往返的时间啦。
核心思路
咱们需要把每个训练记录的关键信息打包:
- 运动员标识(姓名/ID)
- 训练日期(周几,0-6对应你定义的一周顺序)
- A→B的出发时间、到达时间
- B→A的出发时间、到达时间
- 自动计算单程耗时和每日总耗时的方法
完整实现代码
首先定义一个封装训练记录的类,然后再写主类来管理这些记录:
1. 训练记录实体类
public class AthleteTrainingRecord { // 运动员信息 private String athleteName; // 周几(0=周一,1=周二...6=周日,可根据你的需求调整) private int dayOfWeek; // A→B的出发/到达时间(这里假设用当日分钟数,比如420代表7:00) private int departAToB; private int arriveBFromA; // B→A的出发/到达时间 private int departBToA; private int arriveAFromB; // 构造方法,初始化一条完整的往返记录 public AthleteTrainingRecord(String athleteName, int dayOfWeek, int departAToB, int arriveBFromA, int departBToA, int arriveAFromB) { this.athleteName = athleteName; this.dayOfWeek = dayOfWeek; this.departAToB = departAToB; this.arriveBFromA = arriveBFromA; this.departBToA = departBToA; this.arriveAFromB = arriveAFromB; } // 计算A→B的耗时 public int getAToBDuration() { return arriveBFromA - departAToB; } // 计算B→A的耗时 public int getBToADuration() { return arriveAFromB - departBToA; } // 计算当日往返总耗时 public int getDailyTotalDuration() { return getAToBDuration() + getBToADuration(); } // Getter方法,方便获取字段值 public String getAthleteName() { return athleteName; } public int getDayOfWeek() { return dayOfWeek; } }
2. 主类:管理训练记录并统计
import java.util.ArrayList; import java.util.List; public class AthleteTrainingSystem { public static void main(String[] args) { // 用List存储所有训练记录,支持多个运动员的多条数据 List<AthleteTrainingRecord> trainingRecords = new ArrayList<>(); // 添加运动员"张三"一周的往返训练记录(示例数据) trainingRecords.add(new AthleteTrainingRecord("张三", 0, 420, 450, 460, 495)); // 周一:A→B 7:00出发7:30到;B→A 7:40出发8:15到 trainingRecords.add(new AthleteTrainingRecord("张三", 1, 415, 448, 455, 490)); // 周二 trainingRecords.add(new AthleteTrainingRecord("张三", 2, 425, 455, 462, 498)); // 周三 trainingRecords.add(new AthleteTrainingRecord("张三", 3, 422, 453, 460, 492)); // 周四 trainingRecords.add(new AthleteTrainingRecord("张三", 4, 418, 447, 458, 491)); // 周五 trainingRecords.add(new AthleteTrainingRecord("张三", 5, 430, 462, 470, 505)); // 周六 trainingRecords.add(new AthleteTrainingRecord("张三", 6, 428, 460, 468, 502)); // 周日 // 统计"张三"的每周训练数据 String targetAthlete = "张三"; int weeklyTotal = 0; System.out.println(targetAthlete + "的每周训练耗时统计:"); System.out.println("周几 | A→B耗时 | B→A耗时 | 当日总耗时"); System.out.println("----------------------------------------"); for (AthleteTrainingRecord record : trainingRecords) { if (record.getAthleteName().equals(targetAthlete)) { int aToB = record.getAToBDuration(); int bToA = record.getBToADuration(); int dailyTotal = record.getDailyTotalDuration(); weeklyTotal += dailyTotal; System.out.printf(" %d | %d | %d | %d%n", record.getDayOfWeek(), aToB, bToA, dailyTotal); } } System.out.println("----------------------------------------"); System.out.println("每周总耗时:" + weeklyTotal + " 分钟"); System.out.println("每周平均每日耗时:" + (double) weeklyTotal / 7 + " 分钟"); } }
代码说明
- 实体类的优势:把每个训练的所有信息封装在一起,避免了单一数组的局限性,后续你还能轻松扩展字段(比如添加训练类型、天气备注等)。
- 时间处理:示例中用当日分钟数计算,直接相减就能得到耗时。如果需要更规范的时间格式,可以用Java的
LocalTime类替代int,比如LocalTime departAToB = LocalTime.of(7, 0);,计算耗时用Duration.between(departTime, arriveTime).toMinutes()。 - 扩展性:用
List存储记录,支持添加多个运动员的训练数据,后续还能扩展查询功能(比如按运动员、日期筛选记录)。
对比你现有代码的改进
你之前的代码只用静态数组存单程时间,没法区分往返和日期。现在的实现:
- 可以完整记录每位运动员每日的往返出发/到达时间
- 自动计算单程和当日总耗时
- 支持多运动员的训练数据管理
- 代码结构更清晰,后期维护和扩展更方便
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

