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

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Antworten
Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

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

Beitrag von Orioner » Fr Aug 14, 2020 5:36 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Fr Aug 14, 2020 7:57 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

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

Beitrag von Orioner » Fr Aug 14, 2020 8:18 pm

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?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Fr Aug 14, 2020 8:51 pm

Arraylist klingt gut.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

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

Beitrag von Orioner » Sa Jul 24, 2021 10:15 pm

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.

Antworten