数组索引超出循环范围

时间:2014-05-28 18:11:10

标签: java arrays indexoutofboundsexception

import java.util.Scanner;


public class Taxi {

    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        int groups = input.nextInt();
        int counter=0;

        int[] pass = new int[groups];

        for(int i=0; i<groups; i++){
            pass[i] = input.nextInt();
        }

        for(int i=0; i<groups; i++){
            if(pass[i]==4)
                counter++;

            else if(pass[i]+pass[i+1]<=4){
                counter++;
                i++;
            }
            else 
                counter++;
        }

        System.out.println(counter);
    }

}

继续收到错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
    at Taxi.main(Taxi.java:21)

请帮助

2 个答案:

答案 0 :(得分:3)

此行似乎导致异常:

else if(pass[i]+pass[i+1]<=4){

您将i限制为小于groups,这是数组的大小,但是您会故意使用i+1来结束。

首先检查i是否小于groups

else if ( (i < groups - 1) && (pass[i]+pass[i+1]<=4)){

答案 1 :(得分:0)

else if(pass[i]+pass[i+1]<=4)行肯定是你的杀手。

原因是你使用for i < groups

进行循环
 for(int i=0; i<groups; i++)

所以i+1等于最后一次迭代的组。

比方说,例如,组大小为5,然后for循环变为

for(int i=0;i<5;i++)

我们最多可以group[0] ... groups[4]groups[5] causes array index out of bound exception

如果我们检查上面的循环,那么当i转到4时,它会满足循环检查4<5并输入for循环但是你正在进行pass[i] - &GT;好的,pass[i+1]将变得像pass[5],这肯定会导致数组索引超出绑定异常

所以请检查下面的循环

 for(int i=0; i<groups-1; i++)

现在即使是最后一个元素也能正常工作。