ArrayList
インデックスが bounds 内にない要素を参照することはできません[0, size() - 1]
。ArrayList
via を作成ArrayList()
すると、 size のリストが作成され0
ます。この配列に要素を追加するには、要素を追加するメソッドの 1 つを呼び出す必要がありますadd()
。最初の呼び出しは ですget()
が、リストのサイズ0
は であるためget(0)
、IndexOutOfBoundsException
.
何をすべきかは、予想されるリストの内容によって異なります。あなたの場合、指定された数を除く範囲で乱数を生成するヘルパー関数を作成することをお勧めします。その関数を単純なループで使用してリスト全体を生成し、前の要素を前述のヘルパー関数に渡すことができます。
例:
public static int randomInRange(int a, int b) {
return (int)(Math.random() * (b - a + 1));
}
public static int randomInRangeExcluding(int a, int b, int excluding) {
int result = (int)(Math.random() * (b - a));
if (result == excluding) {
result++;
}
return result;
}
public static List<Integer> generateRandomList(int size) {
ArrayList<Integer> result = new ArrayList<Integer>();
for (int j = 0; j <= size; j++) {
if (j > 0) {
result.add(randomInRangeExcluding(0, size - 1, result.get(j - 1)));
} else {
result.add(randomInRange(0, size - 1));
}
}
return result;
}
次を使用して値を取得します。
generateRandomList(100);
これを呼び出すと、連続する 2 つの要素が等しくない乱数の整数のリストが生成されます。
[27, 34, 53, 92, 56, 93, 21, 22, 45, 95, 48, 25, 18, 26, 54, 1, 82, 26, 5, 62, 84, 23, 8, 84, 25, 0, 36, 37, 54, 95, 4, 26, 65, 53, 81, 16, 47, 56, 73, 46, 60, 50, 37, 89, 61, 84, 23, 79, 47, 87, 68, 49, 15, 17, 55, 71, 17, 55, 71, 51, 67, 33, 80, 47, 81, 24, 10, 41, 76, 60, 12, 17, 96, 43, 57, 55, 41, 56, 21, 85, 98, 40, 9, 39, 53, 28, 93, 70, 89, 80, 40, 41, 30, 81, 33, 53, 73, 28, 38, 87, 29]