【问题标题】:Array Index out of bound for loop数组索引越界 for 循环
【发布时间】:2014-05-28 18:11:10
【问题描述】:
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)

请帮忙

【问题讨论】:

  • 这是学习阅读错误日志和基本调试的最佳时机,它将为您节省大量时间。

标签: java arrays indexoutofboundsexception


【解决方案1】:

这行似乎导致了异常:

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)){

【讨论】:

    【解决方案2】:

    else if(pass[i]+pass[i+1]&lt;=4) 线路绝对是你的杀手锏。

    原因是你使用i &lt; groups的for循环

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

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

    比如说,如果组大小是5,那么for循环就变成了

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

    我们可以有group[0] ... groups[4] max 和groups[5]causesarray index out of bound exception

    如果我们像上面那样检查循环,那么当i 转到4 时,它满足循环检查为4&lt;5 并进入 for 循环,但你正在做pass[i] -> 好的,但pass[i+1] 会变成pass[5] 肯定会导致数组索引越界异常

    所以检查如下循环

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

    它现在甚至可以用于最后一个元素。

    【讨论】: