我正在为一个程序编写以下代码,该程序返回一个布尔值,表示int数组中的三个连续数字是否加起来为7.我得到以下异常而不是我想要的输出:&#34 ; java.lang.ArrayIndexOutOfBoundsException:5&#34 ;.有人可以解释我如何解决这个问题吗?
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;
}
}
答案 0 :(得分:0)
因为您正在访问超出其长度的数组元素。
对于长度为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;
}
}
答案 1 :(得分:0)
您从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;
}
答案 2 :(得分:0)
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;
}