乱数シードを持つCollection.shuffleの例外、サイズ16
Collection.shuffleで乱数シードを用いて、コレクションのサイズが16の場合に下記の例外が発生する可能性があります。
- IllegalArgumentException: サイズは負の数にできません。
この例外は、コレクションのサイズが負であることを示しています。コレクションのサイズが 16 である場合、この例外が発生することはありません。パラメータを渡すときにエラーが発生し、その結果、コレクションのサイズが負になった可能性があります。
- UnsupportedOperationException: この操作はサポートされていません
この例外は、コレクションに書き込み操作などを行っているときに発生します。コレクションが変更不可のコレクションである場合に、shuffle()を使用して呼び出したときに、この例外が発生します。
- NullPointerException: Random は null にできません
この例外は、ランダムなオブジェクトが空であることを示します。ランダムシードを持つシャッフルメソッドを使用する場合、空でないランダムオブジェクトを渡す必要があります。空のランダムオブジェクトを渡すと、この例外がスローされます。
予期せぬ事態が発生しないようにするには、次の手順に従ってください:
- shuffleメソッドへ集合のサイズの引数として正の整数を渡すようにしてください、例えば 16
- 集合を可変にしてください。そうでなければ、まず可変のコピーを作成してください。
- shuffle メソッドに空ではないランダム オブジェクトを渡すようにするには、new Random() を使ってランダム オブジェクトを作成します。
以下は、乱数シードを使ったCollection.shuffleの例です。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class ShuffleExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 16; i++) {
numbers.add(i);
}
Collections.shuffle(numbers, new Random(12345));
System.out.println(numbers);
}
}
この例では、整数のリストを16個作成し、乱数シードを持つshuffleメソッドでシャッフルしました。shuffleメソッドに渡す乱数シードは12345です。最後に、シャッフルされたリストを出力します。