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

问题描述 投票:2回答:3

我试图编写一个代码块,它将一个整数数组作为参数,并返回数组中最小元素的索引。此外,如果列表是空列表,则函数应返回-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

任何帮助将非常感激。谢谢。

java arrays indexoutofboundsexception
3个回答
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) 

0
投票

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

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


0
投票

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

int min = array[index];

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

 if(array.length < 1) return -1;
© www.soinside.com 2019 - 2024. All rights reserved.