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