どうも、ちょげ(@chogetarou)です。
配列(Array)をランダムに並び替えてシャッフルする方法を紹介します。
方法

配列(Array)をランダムに並び替えてシャッフルする方法は、2つあります。
Random
1つは、Randomを使う方法です。
まず、Randomのインスタンスを生成します。
そして、forループでフィッシャー–イェーツのシャッフルを実装します。
フィッシャー–イェーツのシャッフルに必要なランダムなインデックスは、RandomのnextInt()で生成します。
//array=シャッフルする配列
Random random = new Random();
int index, temp;
for (int i = array.length - 1; i > 0; i--)
{
index = random.nextInt(i + 1);
temp = array[index];
array[index] = array[i];
array[i] = temp;
}
上記のforループは、対象の配列をランダムに並び替えてシャッフルします。
使用例
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
int[] numbers = new int[]{ 1, 2, 3, 4, 5, 6 };
shuffleArray(numbers);
for (int i : numbers) {
System.out.println(i);
}
}
private static void shuffleArray(int[] array)
{
int index, temp;
Random random = new Random();
for (int i = array.length - 1; i > 0; i--)
{
index = random.nextInt(i + 1);
temp = array[index];
array[index] = array[i];
array[i] = temp;
}
}
}
出力:
6
4
1
2
5
3
Collections.shuffle()
もう1つは、Collections.shuffle()を使う方法です。
まず、ArraysからasList()を呼び出し、asList()の結果を変数に格納します。
Arrays.asList()の引数に配列を指定します。
次に、Collectionsからshuffle()を呼び出します。
Collections.shuffle()の引数に、変数を指定します。
そして、変数からtoList()を呼び出し、変数に配列を指定します。
T[] array = new T[]{ ・・・ };
List<T> list = Arrays.asList(array);
Collections.shuffle(array);
list.toArray(array);
上記のtoArray()は、引数に指定した配列をランダムに並び替えてシャッフルします。
使用例
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Integer[] numbers = new Integer[]{ 1, 2, 3, 4, 5, 6 };
List<Integer> list = Arrays.asList(numbers);
Collections.shuffle(list);
list.toArray(numbers);
for (int i : numbers) {
System.out.println(i);
}
}
}
出力:
3
2
4
5
6
1
まとめ
配列(Array)をランダムに並び替えてシャッフルする方法は、次の2つです。
- Randomを使う方法
- Collections.shuffle()を使う方法
コメント