查找数组中最小元素的索引(Java)

时间:2018-08-05 09:27:56

标签: java arrays indexoutofboundsexception

我正在尝试编写一个代码块,该代码块将整数数组作为参数并返回数组中最小元素的索引。另外,如果列表为空列表,则函数应返回-1。

Test for the block of code.

到目前为止,我已经知道了,

public static int indexOfSmallest(int[] array){
    int index = 0;
    int min = array[index];

    for (int i = 1; i < array.length; i++){
        if (array[i] <= min){
        min = array[i];
        index = i;
        }
    }
        return index;
}

但是,我收到此错误,不确定要修复什么。

enter image description here

任何帮助将不胜感激。谢谢。

4 个答案:

答案 0 :(得分:2)

该错误不言自明。您无法处理输入数组为空的情况。

public static int indexOfSmallest(int[] array){

    // add this
    if (array.length == 0)
        return -1;

    int index = 0;
    int min = array[index];

    for (int i = 1; i < array.length; i++){
        if (array[i] <= min){
        min = array[i];
        index = i;
        }
    }
    return index;
}

如果最小元素多次出现,并且您想返回其第一次出现的索引,请将条件更改为:

if (array[i] < min) 

答案 1 :(得分:0)

如果您的numbers数组为空,并且index声明为0,那么当您尝试访问空列表中不存在的第一个元素时,min = array[index]将导致错误

您应插入if(在for循环之前),以检查numbers数组是否为空。

答案 2 :(得分:0)

您正在获取IndexOutOfBoundsException,因为您试图从该行中的空数组中检索值:

int min = array[index];

只需使用以下命令在此行之前检查数组是否为空:

 if(array.length < 1) return -1;

答案 3 :(得分:0)

public static int indexOfSmallest(int[] arr) {
    int imin = 0;
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] < arr[imin]) {
            imin = i;
        }
    }
    return imin;
}

int min = Arrays.stream(arr).min().orElseThrow();
int imin = Arrays.stream(arr).boxed().collect(Collectors.toList()).indexOf(min);