nie możliwość sprawdzenia, czy (32 - i)
zawsze daje dowolną wartość mniejszą niż 0
. Algorytm nazywa Fisher-Yates tasowania algorytmu, które przypominają bardzo podobny do Ciebie:
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:
Wyjście obu algorytmów będzie lepiej Ci zrozumieć różnicę między nimi, zobaczyć, jak Fisher-Yates
weź pod uwagę wszystkie indeksy, podczas tasowania.
WYJŚCIE:
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) ' –
Nie wygląda zbyt źle. Oprócz oczywistej alternatywy, która została już wskazana, polecam przyjąć konwencje nazewnictwa Java i używać małych liter dla metod i nazw zmiennych. –
@jangroth dzięki za poradę. –