如何存储随机清洗时长并计算5辆巴士的最值与平均值?
没问题,我帮你调整代码来实现这个需求!核心思路是先创建一个数组存储每辆巴士的清洗时长,然后循环处理5辆巴士,最后基于数组计算统计值。咱们先看修改后的完整代码,再拆解关键步骤:
import java.util.concurrent.TimeUnit; public class BusCleaningTest { public static void main(String[] args) { test(); } public static void test() { // 定义数组存储5辆巴士的清洗时长 long[] durations = new long[5]; long totalDuration = 0; long max = 0; long min = Long.MAX_VALUE; // 初始化为最大long值,方便后续找最小值 for (int i = 0; i < 5; i++) { long duration = 2; try { System.out.println("Bus " + (i + 1) + " Needs Cleaning" + "\n"); Thread.sleep(1000); System.out.println("Bus " + (i + 1) + " getting cleaned"); Thread.sleep(1000); // 生成0-19秒的随机清洗时长 duration = (long) (Math.random() * 20); TimeUnit.SECONDS.sleep(duration); // 将当前巴士的清洗时长存入数组 durations[i] = duration; // 累加总时长,同时更新最大最小值 totalDuration += duration; if (duration > max) { max = duration; } if (duration < min) { min = duration; } } catch (InterruptedException iex) { // 建议不要空catch,至少打印异常信息方便调试 iex.printStackTrace(); } System.out.println("Cleaner completed cleaning Bus " + (i + 1) + " in " + duration + " Seconds"); System.out.println("Bus " + (i + 1) + " Leaves\n"); } // 计算平均值,转成double避免整数除法导致精度丢失 double average = (double) totalDuration / durations.length; // 格式化打印统计结果 System.out.println("=== Cleaning Time Statistics ==="); System.out.printf("Average Waiting Time: %.1f | Maximum: %d | Minimum: %d%n", average, max, min); } }
关键修改说明:
- 数组存储时长:创建了
long[] durations = new long[5];,专门用来保存每辆巴士的清洗时间,循环时把每次生成的duration存入数组对应索引位置。 - 循环处理多辆巴士:用
for (int i = 0; i < 5; i++)循环5次,每次处理一辆巴士,还通过i+1给巴士编号,输出信息更清晰。 - 实时计算统计值:在循环里同步累加总时长、更新最大最小值,这样不用事后再遍历一次数组,效率更高;你也可以先存完数组,再单独遍历计算,两种方式都可行。
- 平均值精度优化:把总时长转成
double再除以数量,避免整数除法(比如总时长25、5辆巴士,整数除法会得到5,转double后能保留小数位,结果更准确)。 - 异常处理优化:原来的空catch块改成打印异常栈信息,方便调试时排查问题。
内容的提问来源于stack exchange,提问作者Javy14
相关产品推荐
相关产品推荐

