Java Random nummern nur ein mal?

8 Antworten

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.

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.

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.)

Woher ich das weiß:Berufserfahrung – Software-Entwickler

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.

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

Mach dir eine kleine boolean Matrix mit allen zahlen und frag dann mit einer if-schleife ab, ob die stelle True (noch unbenutzt) oder false ist.

W00dp3ckr  04.10.2016, 22:01

Es gibt keine if-Schleife.

2
PWolff  04.10.2016, 22:45
@W00dp3ckr

Nicht in Java - hier ist das Schlüsselwort goto zwar vorhanden, aber nicht belegt. In andern Programmiersprachen könnte man if ... goto als If-Schleife bezeichnen, wenn man mag.

Aber die unmotivierte Verwendung dieses Begriffs lässt auf Unkenntnis (bestenfalls auf einen etwas unaufmerksamen Autodidakten) schließen.

1
fthee  05.10.2016, 15:52

äääh.... for-schleife meinte ich...

0