我正在尝试编写一个程序,该程序在随机生成的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)
答案 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++)