Java Random nummern nur ein mal?

... komplette Frage anzeigen

7 Antworten

Mein Vorschlag ist nicht sehr elegant, aber einfach zu programmieren. 

36 Vergleiche? Das geht mit weniger. Ich würde ohnehin die Abfrage nicht erst am Ende machen und dann ALLE Zahlen neu generien, sondern nur die aktuelle.

Also in etwa so:

Zahl 1 erzeugen

Zahl 2 erzeugen

Solange Zahl 2 = Zahl 1 : Zahl 2 erzeugen

Zahl 3 erzeugen.

Solange (Zahl 3 = Zahl 2) oder (Zahl 3 = Zahl 1) : Zahl 3 erzeugen

Usw.

Es gibt elegantere Methoden, bei so wenigen Zahlen ist dieser Weg aber vermutlich der kürzere.

Antwort bewerten Vielen Dank für Deine Bewertung

Das Naheliegendste ist eine Liste, aus der du zufällig eine Zahl entfernst (und in eine andere Liste einfügst).

Und bitte, bitte gewöhn dir an, für jeden Bereich von Zufallszahlen nur ein einziges Random-Objekt zu erstellen. Auf genügend schnellen Computern, wo ein Random-Objekt mit der Systemzeit "gesät" wird, werden alle Random-Objekte innerhalb eines "Systemzeit-Ticks" erzeugt und liefern deshalb dieselben Zufallszahlen. (Es sollte mich wundern, wenn hier nicht regelmäßig alle 6 Zufallszahlen gleich sind.)

Antwort bewerten Vielen Dank für Deine Bewertung

Grundsätzlich ist es wirklich einfacher und eleganter, wenn du eine (ArrayList) Liste erstellst und diese mit allen Zahlen im gewünschten Bereich füllst.
Dann sehe zwei Möglichkeiten:
Erstens, wie bereits mehrfach vorgeschlagen: du mischt die Liste und entnimmst die ersten x Zahlen.

Zweitens: du generierst zufällig Zahlen im Bereich von 0 bis [Größe der Liste] und entnimmst dann die Zahl an dem Index und entfernst dieses Element aus der Liste. Die Indizes müßten(afaik) aufrutschen.

Antwort bewerten Vielen Dank für Deine Bewertung

Eleganter wäre es, wenn du dir eine sortierte Liste mit den Zahlen von 1 bis 37 generierst, diese Liste in zufälliger Reihenfolge mischst ("shuffle") und dann die ersten 6 Zahlen dieser zufälligen Liste nimmst. Das, was hier in der Antwort ganz oben steht

http://stackoverflow.com/questions/15196363/java-how-do-i-create-an-int-array-with-randomly-shuffled-numbers-in-a-given-ra

, sieht doch schon ziemlich passend aus.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von triopasi
04.10.2016, 22:10

Genau das wollte ich auch vorschlagen! Das wäre denke ich die schönste und einfachste Lösung.

0

Für eine Lottomaschiene ist es nicht wirklich schlimm, 6 if-Abfragen zu machen. Ob über Boolean oder ein Array in das du die schon gezogenen Werte speicherst ist ersteinmal dahingestellt.

Eleganter ist es aber trotzdem, eine Liste zu erstellen (kannst du ja auch dynamsich mit den Zahlen füllen), diese zu mischen und dann die ersten (oder letzten) Elemente davon holen.

Antwort bewerten Vielen Dank für Deine Bewertung

Habt Ihr For-Schleifen?

Habt Ihr Sets und Maps?

Habt Ihr Arrays?

Habt Ihr Methoden?

Wenn ja: Schreib eine Methode, die prüft, ob eine Zahl schon gezogen wurde, wenn nein, dann füge sie zur Menge der gezogenen Zahlen hinzu. Wenn die Zahl schon einmal gezogen wurde, dann durchlaufe sie nochmals.

Durchlaufe diese Methode mittels einer For-Schleife mehrfach.

-

Natürlich kann man Random.shuffle verwenden, ich halte aber für unwahrscheinlich, dass das die Idee des Aufgabenstellers war.

Antwort bewerten Vielen Dank für Deine Bewertung

machs mit einem Set (z.B. implementierung TreeSet), in dem kann jede Zahl nur einmal vorkommen

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?