比较两个ArrayList索引时的IndexOutOfBoundsException

时间:2014-03-14 03:12:08

标签: java arraylist

我正在尝试编写一个程序,该程序在随机生成的ArrayList中找到最长的数字序列,然后在括号中标记该序列。但是,当我尝试比较for循环中ArrayList的两个索引值时,IndexOutOfBoundsException发生了,我不确定问题出在哪里。

ArrayList<Integer> dieTosses = new ArrayList<Integer>();
for(int i = 0; i < 20; i++)
    {  
        dieTosses.add((int) (Math.random()*6)+1);
    }
    int longestRun = 1;
    int runTracker = 1;
    for(int i = 0; i < dieTosses.size(); i++) //The problem occurs here
    {
        if(dieTosses.get(i) == dieTosses.get(i+1))
        {                                                                        
            longestRun++;
        }
        else if(longestRun > runTracker);
        longestRun = runTracker;
    }
    System.out.println(dieTosses);
    System.out.println(longestRun); 

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 20, Size: 20
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at DieTossing.DieTosser.main(DieTosser.java:18)

2 个答案:

答案 0 :(得分:1)

有问题
if(dieTosses.get(i) == dieTosses.get(i+1)) 

因为在for循环的最后一次迭代中(对于值19,您试图访问位于dieTosses.get(i+1)的位置20。这不存在,因为它们通过0-19索引。

所以试试这个。

 for(int i = 1; i < dieTosses.size(); i++) 
    {
        if(dieTosses.get(i-1) == dieTosses.get(i))
        {                                                                        
            longestRun++;
        }
        else if(longestRun > runTracker);
        longestRun = runTracker;
    }

OR

 for(int i = 0; i < dieTosses.size()-1; i++) 
    {
        if(dieTosses.get(i) == dieTosses.get(i+1))
        {                                                                        
            longestRun++;
        }
        else if(longestRun > runTracker);
        longestRun = runTracker;
    }

你喜欢哪个版本

答案 1 :(得分:0)

根据我观察到的情况,可能是当我到达dieTosses.size()时,你试图调用dieTosses.get(i + 1)导致它超出界限,改变你的

for(int i = 0; i < dieTosses.size(); i++)

for(int i = 0; i < dieTosses.size()-1; i++)