Seite 1 von 1

Zufallszahlen, die einmal "dran waren", nicht wieder bekommen

Verfasst: Fr Aug 14, 2020 5:36 pm
von Orioner
Wenn ich eine zufällige Zahl zwischen 0 und 14 auswählen möchte kann ich einfach schreiben:
value = rnd.nextInt(15); // Java-Code als Beispiel
Das gibt mir - so oft ich diesen Code ausführe - immer eine Zufallszahl zwischen 0 und 14.
Wie aber, gehe ich nun vor, wenn mehrere Zufallszahlen generieren will, dabei aber einmal "gezogene" Zahlen nicht wieder "gezogen" werden sollen? Z.B. bekomme ich als erste Zufallszahl den Wert 12. Danach möchte ich eine Zahl zwischen 0 und 14 haben, aber auf keinen Fall eine 12? Wie wäre das algorithmisch zu lösen? Gibt bestimmt mehrere Lösungsmöglichkeiten.

Re: Zufallszahlen, die einmal "dran waren", nicht wieder bekommen

Verfasst: Fr Aug 14, 2020 7:57 pm
von Xin
Du musst Dir entweder merken, was zu einer Wiederholung führt oder zum Beispiel zu einer Alternative.
Wenn Du die 12 schon gezogen hast, legst Du sie in einen Container. Ziehst Du sie nochmal, hast Du sie bereits im Container, also ziehst Du nochmal. oder rechnest solange +1 bis du eine Zahl findest, die nicht im Container liegt. Das könnte jetzt auch die 15 sein.... in dem Fall musst Du entsprechend von vorne Anfangen.

Alternativ machst Du einen Container mit allen möglichen Zahlen. Nun ziehst Du eine Zufallszahl zwischen 1 und Anzahl der Zahlen im Container. Ziehst Du die 12, nimmst Du das 12. Element raus. Beim nächsten Ziehen wählst Du eine Zahl zwischen 0 und 13. Du ziehst wieder die 12, diesmal ist an Position 12 aber die 13. Du wirst nie zwei gleiche Zahlen ziehen.

Re: Zufallszahlen, die einmal "dran waren", nicht wieder bekommen

Verfasst: Fr Aug 14, 2020 8:18 pm
von Orioner
Die letzte Variante gefällt mir am besten. Wie kann ich mit Jave die Zahlen vorhalten (und rausschmeißen) sobald einmal gezogen. Sollte ich dafür eine ArrayList verwenden, oder gibt es einen eleganteren Weg?

Re: Zufallszahlen, die einmal "dran waren", nicht wieder bekommen

Verfasst: Fr Aug 14, 2020 8:51 pm
von Xin
Arraylist klingt gut.

Re: Zufallszahlen, die einmal "dran waren", nicht wieder bekommen

Verfasst: Sa Jul 24, 2021 10:15 pm
von Orioner
Es gibt noch eine Möglichkeit: Ich halte alle Zufallszahlen, die "gezogen" werden könnten in einem Array vor. Dieses wird zunächst durch vielfaches Vertauschen 2er Werte randomisiert. Danach ziehe ich der Reihe nach Element für Element aus dem Array. Das tue ich so lange, bis jede Zahl einmal gezogen wurde. Der Nachteil ist, dass ich zu Beginn wissen muss, welche Zahlen in Frage kommen, gezogen zu werden.