为什么我得到java.lang.ArrayIndexOutOfBoundsException异常?

时间:2016-11-21 07:21:12

标签: exception indexoutofboundsexception

我正在为一个程序编写以下代码,该程序返回一个布尔值,表示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;
 }

}

3 个答案:

答案 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;
}