だから私は私が書いているいくつかのコードで範囲外のインデックスの例外を取得しています。私が理解していないのは、私が操作しようとしているインデックス要素が存在するという事実を知っているということです。
コードは次のとおりです。
配列リストのコンストラクターがあります
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になりますか?