Вы не проверяя, если (32 - i)
когда-либо дает любое значение менее 0
. Алгоритм называется Fisher-Yates перетасовки алгоритм, напоминающих очень похож на твой:
private int [] shuffleMyArray (int [] array) {
int size = array.length, i = 0;
int temp = 0;
while (size != 0) {
i = ((int) (Math.random() * size--));
if (i < 0) {
i = 0;
}
temp = array [ size ];
array [ size ] = array [ i ];
array [ i ] = temp;
}
return array;
}
EDIT 1:
Выход обоих алгоритмов будет лучше, чтобы вы поняли разницу между ними, посмотреть, как Fisher-Yates
учитывать все индексы, перетасовывая.
ВЫВОД:
Actual Array
0 1 2 3 4
Your Implementation output
i: 0 x: 3
i: 1 x: 4
i: 2 x: 3
i: 3 x: 4
i: 4 x: 4
Fisher Yates implementation output
i: 4 size: 4
i: 2 size: 3
i: 1 size: 2
i: 0 size: 1
i: 0 size: 0
' Collections.shuffle (convertArrayToCollectionHere) ' –
Не выглядит слишком плохо. Помимо очевидной альтернативы, о которой уже говорилось, я бы рекомендовал принять соглашения об именах Java и использовать имена нижних регистров для имен методов и переменных. –
@jangroth спасибо за совет. –