Java:在Array中搜索Integer值时出现ArrayIndexOutOfBoundException

时间:2016-09-22 10:22:33

标签: java

如果我在一个arrary中寻找某个值(针)并且该值没有在此数组中退出,则会收到java.lang.ArrayIndexOutOfBoundsException。 (见下面的代码) 如果值存在于数组中,它就可以正常工作。

我似乎已经坐在我的电脑前很长时间,我已经盲目地看到了这个错误,任何帮助都会非常感激。谢谢!

public static void main(String[] args) {
   int i = 0;
   int[] array;
   array = new int[5];
   int needle = 20; 
   boolean inarray;


   array[0] = 4;
   array[1] = 7;
   array[2] = 13;
   array[3] = 29;
   array[4] = 5;

    while (i <= array.length && needle != array[i]){
        i++;
    }
    inarray = !(i > array.length);
    System.out.println("value in array: " + inarray);

}

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:5     在test.Test.main(Test.java:33) C:\ Users \ admin \ AppData \ Local \ NetBeans \ Cache \ 8.1 \ executor-snippets \ run.xml:53:Java返回:1 BUILD FAILED(总时间:0秒)

4 个答案:

答案 0 :(得分:1)

Java中的数组是基于零的(Java不是您所知道的Fortran):array[0] 对非零长度数组有效。

将停止条件的第一部分更改为i < array.length

答案 1 :(得分:0)

array.length是5所以当你试图获取数组[5]时会出现错误。只需改变

i <= array.length

i < array.length

答案 2 :(得分:0)

你的问题出现在这行代码中。

while (i <= array.length && needle != array[i]){
    i++;
}

正如您的示例中所示,数组的第一个位置是位置0,最后一个位置是位置4.当您执行array.length时,它返回5.因此您的i <= array.length将评估为true在i=5之后,并且会为您提供例外评估array[i],因为array[5]不存在。

而不是i <= array.length将您的条件更改为i < array.length

答案 3 :(得分:0)

更改

i <= array.length

i < array.length

i <= (array.length-1)

指数从0开始直到长度为1