Java数组循环获取最小时间索引时返回最后元素问题排查
问题分析与修复方案
哦,我一眼就瞅出问题啦!你的firstPlace方法里有个关键的小疏忽,导致它总是返回数组最后一个元素的索引,咱们来拆解清楚:
问题根源
你初始化了bestTime = 1000,但在循环判断中,只更新了记录索引的firstValue,却从未更新过bestTime本身!
因为你的times数组里所有时间都小于1000,所以每一次循环都会触发if(time[i] < bestTime)的条件,每次都把firstValue替换成当前的i。等循环遍历完整个数组,firstValue自然就停留在最后一个元素的索引(也就是15,对应Kate)上了。
修复方法
每次找到比当前bestTime更小的时间时,除了更新firstValue为当前索引,还要同步把bestTime更新为这个更小的时间值。这样后续的元素只会和当前已找到的最小时间比较,不会再无脑覆盖索引了。
修复后的firstPlace方法代码如下:
public static int firstPlace(int[] time, String[] names) { int i; // 直接用数组第一个元素初始化,更合理(避免硬编码1000的局限性) int bestTime = time[0]; int firstValue = 0; for(i = 0; i < time.length; i++) { if(time[i] < bestTime) { bestTime = time[i]; // 关键:更新当前最小时间 firstValue = i; } } return firstValue; }
另外,我把bestTime的初始值改成了time[0],这样比硬编码1000更灵活——如果未来数组里的时间有大于1000的情况,代码也能正常工作。
验证结果
修复后运行程序,输出的第一名应该是:
In first place is John with a time of 243 minutes!
这和你期望的正确结果一致~
内容的提问来源于stack exchange,提问作者nox
相关产品推荐
相关产品推荐

