如果我在一个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秒)
答案 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