Sie nicht überprüft, ob (32 - i)
gibt immer einen Wert unter 0
. Der Algorithmus ist Fisher-Yates schlurfenden Algorithmus genannt, die wie Ihnen sehr ähneln:
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:
Der Ausgang der beiden Algorithmen besser machen Sie den Unterschied zwischen den beiden zu verstehen, wie Fisher-Yates
berücksichtigen Sie alle Indizes beim Mischen.
OUTPUT:
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) ' –
Sieht nicht so schlecht aus. Abgesehen von der offensichtlichen Alternative, auf die bereits hingewiesen wurde, würde ich empfehlen, Java-Namenskonventionen zu übernehmen und Kleinbuchstaben für Methoden- und Variablennamen zu verwenden. –
@jangroth danke für den Rat. –