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

Finding the index of the smallest element in an array (Java)

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

到目前为止我已经得到了,

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;
}

但是,我遇到了这个错误并且不确定我需要修复什么。

如有任何帮助,我们将不胜感激。谢谢。

错误不言自明。您未能处理空输入数组的情况。

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;
}

如果最小的元素出现多次,而你想return它第一次出现的索引,把你的条件改成:

if (array[i] < min) 

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

您应该插入一个 if(在 for 循环之前)来检查 numbers 数组是否为空。

您收到 IndexOutOfBoundsException,因为您试图从行中的空数组中检索值:

int min = array[index];

只需检查此行之前的数组是否为空:

 if(array.length < 1) return -1;
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);