Blender3D
Top Contributor
Ich finde:
Jedenfalls habe ich noch keine Lottoziehung gesehen, wo die gezogene Zahl wieder in den Kessel geworfen wird und bei der nächsten Ziehung geschaut wird ob diese bereits gezogen war.
Das führt zu unnötigen Laufzeiten z.B. 44 aus 45 oder ähnliches braucht für jede Zahl immer länger bis die nächste Zahl gefunden wird.
Also: Lösung wäre die Anzahl der Zufallszahlen nach jeder Ziehung zu reduzieren und das Ergebnis der Nächsten Zahl auf die Zielmenge zu übertragen.
Diese Lösung bildet die Wirklichkeit sehr schlecht ab.
Jedenfalls habe ich noch keine Lottoziehung gesehen, wo die gezogene Zahl wieder in den Kessel geworfen wird und bei der nächsten Ziehung geschaut wird ob diese bereits gezogen war.
Das führt zu unnötigen Laufzeiten z.B. 44 aus 45 oder ähnliches braucht für jede Zahl immer länger bis die nächste Zahl gefunden wird.
Also: Lösung wäre die Anzahl der Zufallszahlen nach jeder Ziehung zu reduzieren und das Ergebnis der Nächsten Zahl auf die Zielmenge zu übertragen.
Code:
public class Lotto {
public static int[] ziehen(int totalNumbers, int drawingQuantity) {
boolean[] usedNumbers = new boolean[totalNumbers];
int[] drawnNumbers = new int[drawingQuantity];
int toDrawQuantity = drawingQuantity;
Random rnd = new Random(System.currentTimeMillis());
while (toDrawQuantity != 0) {
int number = Math.abs(rnd.nextInt()) % (toDrawQuantity) + 1;
drawnNumbers[drawingQuantity - toDrawQuantity] = getConcretNumber(usedNumbers, number);
toDrawQuantity--;
}
return drawnNumbers;
}
private static int getConcretNumber(boolean[] usedNumbers, int number) {
int nummerNeu = number;
for (int i = 0; i < usedNumbers.length; i++) {
if (usedNumbers[i])
nummerNeu++;
if (i == nummerNeu - 1)
break;
}
usedNumbers[nummerNeu - 1] = true;
return nummerNeu;
}
}