Random Generator

E

EdwinEichhorn

Mitglied
Hallo,

was könnte man tun damit dieser Zufallsgenerator nicht nur eine einzige Zahl ausgibt (für jede Betätigung des Buttons), sondern mehrere verschiedene gleichzeitig. Außerdem sollte er auch keine Nullen ziehen (was er aber tut). Danke für Ratschläge.

Java:
protected void btnButton5ActionPerformed(ActionEvent e)
    {
        
         int[] lottery = new int[6];
            int randomNum = 1;

            for (int i = 0; i < 6; i++) {
                randomNum = (int) (Math.random() * 45); 
                for (int x = 0; x < i; x++) {
                    if (lottery[x] == randomNum) 
                    {
                        randomNum = (int) (Math.random() * 45);
                        x = -1; 
                    }

                }
                lottery[i] = randomNum;
            }

            for (int i = 0; i < lottery.length; i++)
                lblButton.setText(""+randomNum);
 
R

realodds

Aktives Mitglied
Du könntest ja zwischen dem generieren noch eine for schleife machen also:
Java:
for (int l = 0; l < anzahlVonRdmZahlen){
    // generiere zahlen
}
Außerdem (mag ich zumindest nicht) solltest du (meiner meinung nach) nicht
Java:
Math.random()
benutzen sondern die Klasse von java.util. Also:
Java:
Random rdm = new Random();
int zahl = rdm.nextInt(45); // wirft eine zahl von 0 - 44 aus
// wenn du keine 0 willst:
int zahl = rdm.nextInt(45) + 1; // wirft eine zahl von 1 - 45 aus
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Ich mag die Stream Variante für diesen Fall, weil man mit distinct ein super Utility dafür hat.

Code:
int[] lottery = ThreadLocalRandom.current().ints(1, 46).distinct().limit(6).toArray();
System.out.println("Lottery numbers: " + Arrays.toString(lottery));

PS.: Kleiner Hinweis - Lotto ist im Original 6 aus 49
 
mihe7

mihe7

Top Contributor
@MoxxiManagarm wegen 6 aus 49 :)

@EdwinEichhorn Du kannst Dich dem Problem annähern, indem Du schaust, wie Lotto real funktioniert. Du hast eine Trommel mit z. B. 49 Zahlen (Kugeln). Aus diesen wird nun zufällig eine gezogen, wobei die gezogene Kugel nicht mehr zurück in die Trommel gelegt wird.

Die Trommel mit den 49 Zahlen kannst Du als Array modellieren, das die Zahlen von 1 bis 49 enthält. Wenn Du eine Zahl ziehst, legen wir sie zur Seite, damit wir sie nicht nochmal ziehen. Insgesamt bleiben es aber natürlich 49 verschiedene Zahlen. D. h. wir können z. B. sagen, dass sich am Anfang des Arrays g gezogene Zahlen befinden, während sich 49-g noch nicht gezogene Zahlen anschließen.

Im Code sieht das dann so aus:
Java:
Random zufall = new Random();
int[] zahlen = new int[49];
for (int i = 0; i < zahlen.length; i++) {
    zahlen[i]= i+1;
}

for (int g = 0; g < 6; g++) {
    int index = zufall.nextInt(zahlen.length - g) + g;
    int tmp = zahlen[g];
    zahlen[g] = zahlen[index];
    zahlen[index] = tmp;
}
Der Code läuft in zwei wesentlichen Schritten ab. Der erste Schritt besteht darin, die Lostrommel zu initialisieren. Das bedarf keiner weiteren Erläuterung. Der zweite Schritt ist die Ziehung.

Dazu verwenden wir eine Schleife mit der Laufvariablen g, die angibt, wie viele Zahlen bereits gezogen sind. Zu Beginn ist g 0, da noch keine Zahl gezogen wurde, in der nächsten Iteration 1 usw. Für jedes g ermitteln wir nun eine Zahl, indem wir einen zufälligen Index bestimmen, der die "Position in der Lostrommel" angibt. Wenn wir z. B. 3 Zahlen gezogen haben, dann bleiben noch 49 - 3 = 46 Zahlen in der Trommel. Da die Positionen mit 0 beginnen, brauchen wir eine Zufallszahl zwischen 0 und 46, das erreichen wir mit zufall.nextInt(zahlen.length - g). Da die ersten g Zahlen aber bereits gezogen sind, müssen wir noch g draufzählen. Anschließend vertauschen wir die Zahl an Position g (das ist eine bislang noch nicht gezogen Zahl) mit der Zahl, die sich an der eben zufällig bestimmten Position befindet.

Das wiederholen wir insgesamt sechsmal und schon sind die ersten sechs Zahlen im Array zufällig gezogen.
 
kneitzel

kneitzel

Top Contributor
Wobei es in der Praxis etwas anders aussieht, so man sich an der Praxis orientieren möchte.

Lotto ist ja so: Man hat die Kugeln (Zahlen) von 1 bis 49.
Dann wirbelt man sie durcheinander und nimmt dann die ersten 6 Stück.

So kann man das auch abbilden. Also Collection mit Zahlen von 1 - 49 füllen. Collections.shuffle aufrufen und dann die ersten 6 Zahlen entnehmen.

Und da dies ja bestimmt eine Übung ist, könnte man hier einfach her gehen und das selbst machen. Wie man sowas mischt, kann man sich überlegen. Ggf. einfach die Elemente durchgehen und für jede einen Tauschpartner ermitteln und die Zahlen tauschen.

Aber es wird dann gleich deutlich, dass dies nicht effektiv ist, denn dann wird 49 mal eine Zufallszahl ermittelt. Bei dem Vorschlag von @mihe7 wird nur 6 mal eine Zufallszahl ermittelt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Random Number - Generische Formel zwischen zwei INKLUSIVEN Werten Allgemeine Java-Themen 16
T Math.random Allgemeine Java-Themen 9
Javafan01 Deklarieren einer Math.random() Zufallszahl Allgemeine Java-Themen 16
G Aus JTextField Zahlen auslesen und random generieren Allgemeine Java-Themen 10
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
S Random Passwort für den User + Hashen Allgemeine Java-Themen 6
BRoll Random - Wie aufgebaut? Allgemeine Java-Themen 9
T java.uil.Random liefert negative Werte Allgemeine Java-Themen 2
G Random zeichensatz Allgemeine Java-Themen 2
U Math.Random anders verteilen Allgemeine Java-Themen 4
N Die Klasse Random in Java Allgemeine Java-Themen 3
H java.util.random magischer Startwert? Allgemeine Java-Themen 2
L Zufallszahlen mit Random.nextdouble() Allgemeine Java-Themen 3
dayaftereh Random Numbers in Java Allgemeine Java-Themen 7
Q Random mit beeinflusster Wahrscheinlichkeit Allgemeine Java-Themen 4
I Random Acces auf ein Set Allgemeine Java-Themen 4
S Random funktion in einer Grafischen Oberfläche Allgemeine Java-Themen 10
ARadauer Random keine Zahlen doppelt Allgemeine Java-Themen 4
S Random Allgemeine Java-Themen 9
C Math.random() vs Random Allgemeine Java-Themen 5
S Random() vs Math.random Allgemeine Java-Themen 4
H Math.random() Allgemeine Java-Themen 3
L Generator für einen Parser implementieren Allgemeine Java-Themen 13
1 Name Generator für Videos Allgemeine Java-Themen 1
S QR-Code generator Allgemeine Java-Themen 2
A Audio Rechteck Generator Allgemeine Java-Themen 5
D Parser-generator für mathematische Funktionen Allgemeine Java-Themen 12
borobudur MVC Model Generator Allgemeine Java-Themen 2
boxi Registartions CodeBild generator Allgemeine Java-Themen 2
G Scanner-Generator zur Erkennung von Java Tokens Allgemeine Java-Themen 7
B Von neumann generator Allgemeine Java-Themen 7

Ähnliche Java Themen


Oben