因此,我正在编写的某些代码中出现索引越界异常。我不明白的是,我知道我正在尝试使用的索引元素存在。
这是代码:
我有一个数组列表的构造函数
public StixBoard(int number)
{
stixGame = new ArrayList<Integer>(number);
for (int i = 0; i < number; i++)
{
stixGame.add(i);
}
}
此块生成随机变量 1-3
public int computeMove()
{
int numberOfStix = (int) (3.0 * Math.random()) + 1;
return numberOfStix;
}
真的很简单,现在我有一个方法,它采用提供的参数并尝试从数组列表中删除这些数量的元素。可以看到,参数必须在1到3之间,并且必须小于等于数组列表的大小。否则,将提示用户输入另一个数字
public boolean takeStix(int number)
{
boolean logicVar = false;
placeHolder = stixGame.size();
if ((number >= 1 && number <= 3) && number <= placeHolder)
{
for (int i = 0; i < number; i++)
{
stixGame.remove(i);
logicVar = true;
}
} else if (number > 3 || number > placeHolder)
{
do
{
System.out
.println("Please enter a different number, less than or equal to three.");
Scanner numberScan = new Scanner(System.in);
number = numberScan.nextInt();
} while (number > 3 || number > placeHolder);
}
return logicVar;
}
因此,当该程序运行时,computeMove() 方法会生成一个随机 int(假设是计算机玩家的角色)并尝试将该值转换为要从数组列表中删除的索引数。
这最终使我想到了这一点:
How many stix on the table? 4
|||||||||| 4 stix on the table
It's the computer's turn!
The computer chose 3
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.remove(ArrayList.java:387)
at StixBoard.takeStix(StixBoard.java:38)
at StixGame.main(StixGame.java:55)
如您所见,数组列表的大小为 4,但是当计算机掷出 3(这应该让我留下 1)时,我会遇到这个错误。我的数组列表如何从大小为 4 的索引变为大小为 2?