You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:10:30