Java 比较两个ArrayList索引时的IndexOutOfBoundsException

Java 比较两个ArrayList索引时的IndexOutOfBoundsException,java,arraylist,Java,Arraylist,我试图编写一个程序,在随机生成的ArrayList20中找到最长的数字序列,然后在括号中标记该序列。但是,当我尝试在for循环中比较ArrayList的两个索引值时,会出现IndexOutOfBoundsException,我不确定问题出在哪里 ArrayList<Integer> dieTosses = new ArrayList<Integer>(); for(int i = 0; i < 20; i++) { dieTosses.a

我试图编写一个程序,在随机生成的
ArrayList
20中找到最长的数字序列,然后在括号中标记该序列。但是,当我尝试在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)
ArrayList dieTosses=new ArrayList();
对于(int i=0;i<20;i++)
{  
add((int)(Math.random()*6)+1);
}
int longestRun=1;
int runTracker=1;
对于(int i=0;irunTracker);
longestRun=runTracker;
}
系统输出打印LN(dieTosses);
System.out.println(longestRun);
线程“main”java.lang.IndexOutOfBoundsException中的异常:索引:20,大小:20
位于java.util.ArrayList.rangeCheck(未知源)
位于java.util.ArrayList.get(未知源)
在DieTossing.DieTosser.main(DieTosser.java:18)
您在上遇到问题

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;
    }
for(int i=1;irunTracker);
longestRun=runTracker;
}

for(int i=0;irunTracker);
longestRun=runTracker;
}

您喜欢哪个版本

根据我的观察,可能是当我到达dieTosses.size()时,您试图调用dieTosses.get(I+1),这会导致它超出范围,请更改您的

for(int i=0;i

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