文字の配列をシャッフルするにはこれが必要です
このようなシャッフル コードをプリミティブに適応させることができます
public static void shuffle(char[] chars, Random rnd) {
int size = chars.length;
for (int i = size; i > 1; i--) {
int idx = rnd.nextInt(i);
char tmp = chars[idx];
chars[idx] = chars[i-1];
chars[i-1] = tmp;
}
}
あなたはただすることができます
Collections.shuffle(Arrays.asList(array), random);
または、このコードを見ることができます。一時変数を 1 つ使用し、ランダムのサイズを小さくする方が効率的です。これを行う方法については Collections.shuffle を参照してください。
public static void shuffle(List<?> list, Random rnd) {
int size = list.size();
if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
for (int i=size; i>1; i--)
swap(list, i-1, rnd.nextInt(i));
} else {
public static void swap(List<?> list, int i, int j) {
final List l = list;
l.set(i, l.set(j, l.get(i)));
}
注:あなたはやっていますが(lastIndex+1)
、lastIndexはarr.length - 1
本当にこれだけですarr.length