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

Java实现findMinimum查找数组最小值部分用例失败排查

数组最小值查找方法代码故障分析

需求说明

实现int findMinimum(int[] arr)方法,完整遍历传入的整型数组,查找并返回数组中的最小数值。

  • 方法签名:int findMinimum(int[] arr)
  • 示例输入:arr = {9, 2, 3, 6}
  • 示例输出:2

提交的问题代码

class CheckMinimum
{
    public static int findMinimum(int[] arr) {
        int temp= arr[0];

        for(int i=0; i<arr.length; i++){
            if(temp< arr[i+1])
                return temp;
            else
                temp= arr[i+1];
        }
        return temp;
    }
    public static void main(String args[]) {
        int[] arr = {4,5,0,3,6};
        System.out.print("Array : ");
        for(int i = 0; i < arr.length; i++)
            System.out.print(arr[i] + " ");
        System.out.println();

        int min = findMinimum(arr);
        System.out.println("Minimum in the Array: " + min);
    }
}

故障表现

代码在部分测试用例下可返回正确结果,但运行测试用例findMinimum([4,5,0,3,6])时输出不符合预期:预期返回值为0,实际返回值为4。调整最小值0在数组中的位置后,代码偶尔能返回正确结果。

错误根因

代码存在两个致命逻辑错误:

  1. 循环内提前返回,未完成全数组遍历
    代码的判断逻辑是:只要当前记录的临时值temp小于下一个位置的元素,就立刻返回temp,完全终止遍历。在测试用例[4,5,0,3,6]中,temp初始值为数组首元素4,第一次循环i=0时,对比的元素是arr[1]=5,此时判断4 < 5成立,直接返回4,数组后续的0、3、6三个元素根本没有被遍历到,自然无法找到真正的最小值。
    所谓“调整0的位置代码就能正常运行”,本质是刚好最小值出现在触发提前return的判断之前,属于巧合,逻辑本身不成立。
  2. 存在数组下标越界隐患
    循环的终止条件是i < arr.length,但循环内部访问的元素是arr[i+1],当i遍历到最后一个位置i = arr.length - 1时,i+1 = arr.length,已经超出数组下标的合法范围(数组合法下标范围是0到arr.length-1),会直接抛出ArrayIndexOutOfBoundsException。之前的测试用例没有触发这个错误,只是因为提前return在循环第一次迭代就退出了,没走到i更大的场景。

修正后实现

正确的逻辑是遍历完数组所有元素,逐个和当前记录的最小值对比,发现更小值就更新记录,等全部元素遍历完成后再返回结果,不要在循环中途返回。修正后的方法如下:

public static int findMinimum(int[] arr) {
    // 增加空数组边界判断,避免初始赋值报错
    if (arr == null || arr.length == 0) {
        throw new IllegalArgumentException("传入数组不能为空");
    }
    int min = arr[0];
    // 从下标1开始遍历所有元素,不需要偏移访问i+1
    for(int i = 1; i < arr.length; i++){
        if (arr[i] < min) {
            min = arr[i];
        }
    }
    return min;
}

内容的提问来源于stack exchange,提问作者Mr.Frog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:31:11