为什么我得到java.lang.ArrayIndexOutOfBoundsException异常?
问题描述:
我正在为一个程序写下面的代码,该程序返回一个布尔值,这个布尔值是否是一个int数组中的三个连续数加起来为7.我得到下面的异常而不是我想要的输出:“java.lang .ArrayIndexOutOfBoundsException:5" 。请有人解释我如何解决这个问题?为什么我得到java.lang.ArrayIndexOutOfBoundsException异常?
public static void main(String[] args) {
int[] numbers ={2,1,5,1,0};
System.out.println(luckysevens(numbers));
}
public static boolean luckysevens(int array[]) {
boolean isLucky= false;
for (int i=0; i<=array.length; i++){
if (array[i]+array[i+1]+array[i+2]==7){
isLucky=true;
}
else {
i++;
}
}
return isLucky;
}
}
答
因为要访问超过其长度的数组元素。
对于长度为L的数组,您可以访问索引范围为0到L-1的元素。
当您访问超出此索引范围的元素时,会出现上述异常。
你甚至不需要在else条件下增加。
public static void main(String[] args) {
int[] numbers ={2,1,5,1,0};
System.out.println(luckysevens(numbers));
}
public static boolean luckysevens(int array[]) {
boolean isLucky= false;
for (int i=0; i<array.length-2; i++){
if (array[i]+array[i+1]+array[i+2]==7){
isLucky=true;
}
}
return isLucky;
}
}
+0
好的,但该方法仍然返回false,即使它应该为luckysevens(数字)返回true。这是为什么发生? –
答
你正在比较0-5(即6个元素,但你的数组只有5个),所以你要走出界限。
所有你需要做的是从0到去 - array.length-1;
因此必须改变条件的一部分i<=array.length;
喜欢这个i<(array.length-1);
public static void main(String[] args) {
int[] numbers ={2,1,5,1,0};
System.out.println(luckysevens(numbers));
}
public static boolean luckysevens(int array[]) {
boolean isLucky= false;
for (int i=0; i<(array.length-1); i++){
if (array[i]+array[i+1]+array[i+2]==7){
isLucky=true;
}
else {
i++;
}
}
return isLucky;
}
答
public static void main(String[] args)
{
int[] numbers ={2,1,5,1,0};
System.out.println(luckysevens(numbers));
}
public static boolean luckysevens(int array[])
{
boolean isLucky= false;
//Use array.length-2 in the code
for (int i=0; i<=array.length-2; i++)
{
if (array[i]+array[i+1]+array[i+2]==7)
{
isLucky=true;
return isLucky;
}
}
return isLucky;
}
您需要更改的,如果条件为array.length-2 – Venkat
此外,您需要删除else条件或删除循环中的增量部分 – Venkat