Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen

J

jan21

Mitglied
Hallo zusammen
ich möchte im unten stehend Code 4 unterschiedlich zufällige Zahlen erzeugen jede dieser Zahlen wird am Ende genutzt um eine Position in einem Array abzurufen allerdings musste ich bei der Ausgabe feststellen das anscheined doch 2 mal die gleiche Zahl erzeugt werden kann .
Wie lässt sich dies beheben und kennt jemand eine elegantere Lösung für das Befüllen des JLabels ?

Code:
        if (e.getSource()== newGroup)
                {
                int    a = names.length;
                    Random rand = new Random();
                   int b1 = rand.nextInt(a);        
                   
                    int b2 = rand.nextInt(a);
                    if (b2==b1)
                    {
                        b2 = rand.nextInt(a);
                    }
                   
                   
                     int b3 = rand.nextInt(a);
                     if (b3==b2 || b3==b1)
                     {
                         b3 = rand.nextInt(a);
                     }
                   
                       int b4 = rand.nextInt(a);
                           if (b4==b3 || b4==b2 || b4==b1)
                               {
                               b4 = rand.nextInt(a);
                               }
       
                    team1.setText(names[b1]);
                    team1.setText(team1.getText()+" "+names[b2]);
                    team1.setText(team1.getText()+" "+names[b3]);
                    team1.setText(team1.getText()+" "+names[b4]);
                   
                }
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
ich möchte im unten stehend Code 4 unterschiedlich zufällige Zahlen erzeugen jede dieser Zahlen wird am Ende genutzt um eine Position in einem Array abzurufen allerdings musste ich bei der Ausgabe feststellen das anscheined doch 2 mal die gleiche Zahl erzeugt werden kann .
Einfaches Beispiel:

Angenommen b1 ist 1, b2 ist 2:
int b3 = rand.nextInt(a); <- b3 ist 1
Das if trifft zu,
b3 = rand.nextInt(a); <- b3 ist 2 und wird nicht nochmal überprüft.



Wie lässt sich dies beheben und kennt jemand eine elegantere Lösung für das Befüllen des JLabels ?
Du könntest zB einfach die Zahlen 1 bis a in ein Array legen, und dieses mischen - die ersten 4 Zahlen daraus dann nutzen.
Oder, wenn möglich, einfach direkt namen mischen und die ersten 4 nutzen.
 
mihe7

mihe7

Top Contributor
Java:
Random r = new Random();
for (int i = 0; i < names.length; i++) {
    int ix = r.nextInt(names.length - i) + i;
    String tmp = names[i];
    names[i] = names[ix];
    names[ix] = tmp;
}
 
K

kneitzel

Gast
Statt dem if könntest Du eine while Schleife verwenden. Aber das ist schon einiges an doppeltem code....

Universell lässt sich das natürlich auch machen, wenn man die Zahlen z.B. in einer ArrayList speichert oder so.
Dann hat man eine äußere Schleife, die so lange läuft, bis die Anzahl der Elemente der gewünschten Anzahl entspricht. In der Schleife wird eine neue Zufallszahl ermittelt und dann geprüft, ob diese bereits in der Liste enthalten ist. Ist dies nicht der Fall, wird die Zahl hinzu gefügt.

Das ist dann relativ übersichtlich und kann auch schön in eine Methode ausgelagert werden.
 
K

kneitzel

Gast
Java:
Random r = new Random();
for (int i = 0; i < names.length; i++) {
    int ix = r.nextInt(names.length - i) + i;
    String tmp = names[i];
    names[i] = names[ix];
    names[ix] = tmp;
}

Wäre es da evtl. nicht einfacher, wenn man auf das Mischen verzichtet?
Statt dessen tauscht man das gezogene Elemente mit dem Element am Anfang oder am Ende um dann mit dem verkleinerten Array weiter zu arbeiten.

Also z.B. Array mit n Elementen. Ich merke mir die Anzahl der noch nicht gezogenen Elemente: Am Anfang ist das n.
Dann ermittel ich eine Zufallszahl 0 <= zufallszahl < Anzahl nicht gezogener Elemente
Dann tausche ich das Element an Position der Zufallszahl mit dem Element an Position Anzahl noch icht gezogener Elemente - 1 und reduziere die Anzahl der noch nicht gezogenen Zufallszahlen.

==> Dann habe ich nach dem ziehen von x Elementen diese x Elemente am Ende des Arrays.

Wäre halt etwas optimierter, da ich die Anzahl der Zufallszahlen und der durchgeführten Tauschaktionen reduziert habe.
 
J

jan21

Mitglied
Danke füt eure Hilfe
ich habe den Code von mihe7 genommen und das array davor noch mal geklont um es in der ursprungsform nutzen zu können
 
mihe7

mihe7

Top Contributor
==> Dann habe ich nach dem ziehen von x Elementen diese x Elemente am Ende des Arrays.
Wenn Du nur x-Elemente brauchst, dann musst Du in der for-Bedingung einfach names.length durch x ersetzen. Der Rest entspricht genau dem, was Du geschrieben hast :)

Am Anfang ist i = 0, es stehen names.length - i Elemente zur Verfügung. Daher wird die zwischen 0 und names.length - i (excl.) ermittelte Zufallszahl um 1 erhöht, d. h. es ist i <= zufallszahl < names.length. Das Element an Position i wird durch das Element an Position zufallszahl ersetzt. Danach wird i um 1 erhöht, so dass in der nächsten Iteration das Array "kleiner" ist.
 
O

ocsme

Top Contributor
mhh... hätte man die Zahlen nicht auch einfach in einem Set speichern können.
Eine Menge enthält keine Duplikate, somit speichert man die Zufallszahlen solange in den Set bist der Set max n erreicht. Dann hat man seine n Zufallszahlen auch ohne Duplikate :)

LG
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
mhh... hätte man die Zahlen nicht auch einfach in einem Set speichern können.
Eine Menge enthält keine Duplikate, somit speichert man die Zufallszahlen solange in den Set bist der Set max n erreicht. Dann hat man seine n Zufallszahlen auch ohne Duplikate :)
Ja, oder mit Stream, distinct und limit :)

Vom Niveau her würde ich hier aber ne andere Lösung vorziehen, wie zB das mischen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
M Compiler-Fehler Fehler beim Ausführen des Codes Java Basics - Anfänger-Themen 25
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
Kirby.exe Fehler beim Ausgeben Java Basics - Anfänger-Themen 2
K Fehler beim Programmieren von TicTacToe Java Basics - Anfänger-Themen 12
L Fehler beim laden eines Icons Java Basics - Anfänger-Themen 3
U Best Practice Fehleranalyse, welche Fehler macht Ihr beim Lernen bzw. auch später Java Basics - Anfänger-Themen 12
M GUI - Fehler abfangen beim Dividieren Java Basics - Anfänger-Themen 8
E Fehler beim Debuggen einer jsp-Datei Java Basics - Anfänger-Themen 3
J Fehler beim Runden Java Basics - Anfänger-Themen 3
V Klassen Fehler beim compilieren einer Datei in CamelCase Java Basics - Anfänger-Themen 2
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
S Compiler-Fehler Anfänger sucht Hilfe. Fehler beim Compilieren Java Basics - Anfänger-Themen 6
B Input/Output Fehler beim Übertragen eines ObjectOutputStreams. Java Basics - Anfänger-Themen 0
T Fehler beim ActionListener Java Basics - Anfänger-Themen 2
W Fehler beim verlängern des Arrays Java Basics - Anfänger-Themen 5
S Fehler beim Ausführen Java Basics - Anfänger-Themen 5
S Seriealiserung Fehler beim Landen Java Basics - Anfänger-Themen 1
Matze 12 häufige Fehler beim Programmieren lernen Java Basics - Anfänger-Themen 2
R [Erledigt]Fehler beim löschen von einzelnen Buchstaben aus StringBuilder Java Basics - Anfänger-Themen 1
N Fehler beim importieren vom package Java Basics - Anfänger-Themen 2
I beim auslesen der Properties gibt es ein Fehler Java Basics - Anfänger-Themen 7
T Fehler beim Schreiben in Dateien! Java Basics - Anfänger-Themen 4
A Erste Schritte Nicht zu findender Fehler beim Auslesen eines Buchstabens Java Basics - Anfänger-Themen 4
X Fehler beim Öffnen von Jar Datei: "kein Hauptmanifestattribut" Java Basics - Anfänger-Themen 5
B Erste Schritte Fehler beim starten Java Basics - Anfänger-Themen 12
A Resize-Fehler (nur) beim waagrecht Verkleinern Java Basics - Anfänger-Themen 5
S brauche hilfe beim fehler finden Java Basics - Anfänger-Themen 2
1 Erste Schritte ständige Fehler beim Ausführen von Hello World Java Basics - Anfänger-Themen 6
S fehler beim datum parsen Java Basics - Anfänger-Themen 6
F Genereller Fehler beim Starten des Javaprogramms Java Basics - Anfänger-Themen 3
K taschenrechner - Fehler beim Kürzen eines Bruches finden Java Basics - Anfänger-Themen 20
U Fehler beim Umwandeln eines Strings in int Java Basics - Anfänger-Themen 8
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
F HttpURLConnection Fehler beim Quelltext holen Java Basics - Anfänger-Themen 6
S Fehler beim Auslösen des ActionListeners in Verbindung mit einer Queue Java Basics - Anfänger-Themen 5
D Fehler beim Compilen Java Basics - Anfänger-Themen 8
A Fehler beim Umschreiben in Array Java Basics - Anfänger-Themen 6
K Fehler beim Einfügen eines Programm Icons Java Basics - Anfänger-Themen 6
J Compiler-Fehler .jar Datei erstellt aber beim Ausführen Fehler Java Basics - Anfänger-Themen 5
M Fehler beim Übergeben von Daten an JTable Java Basics - Anfänger-Themen 14
T Fehler beim Konvertieren (String --> Float) Java Basics - Anfänger-Themen 5
H TicTacToe Fehler beim Compilieren Java Basics - Anfänger-Themen 7
S mögliche Fehler beim Initialisieren von Variablen Java Basics - Anfänger-Themen 19
N Datentypen Fehler beim Umwandeln in byte Java Basics - Anfänger-Themen 3
StrikeTom Fehler beim Audiodatei abspielen Java Basics - Anfänger-Themen 4
M Fehler beim Ausführen von runable Jar Java Basics - Anfänger-Themen 9
StrikeTom Fehler beim bildanzeigen Java Basics - Anfänger-Themen 10
A jexcelapi fehler beim einrichten Java Basics - Anfänger-Themen 2
M Fehler beim Compilieren Java Basics - Anfänger-Themen 2
S Fehler beim berechnen von MD5 Java Basics - Anfänger-Themen 7
M Fehler beim Compilieren Java Basics - Anfänger-Themen 4
J Fehler beim Ausführen von Programm Java Basics - Anfänger-Themen 3
D Class not found fehler beim ausführen unter konsole : / Java Basics - Anfänger-Themen 2
S Fehler beim Speichern von MP3-Stream Java Basics - Anfänger-Themen 6
R Derby-Datenbank: Fehler beim Zugriff im Embedded Modus Java Basics - Anfänger-Themen 27
G Fehler beim builden javax...... Java Basics - Anfänger-Themen 4
L Fehler beim Aufruf eines Applet Java Basics - Anfänger-Themen 2
hdi Fehler beim Model-Update einer JList (DefaultListModel) Java Basics - Anfänger-Themen 3
C Fehler beim ausgführen von Java App als nicht Admin u. Vista Java Basics - Anfänger-Themen 6
G Fehler beim Ausführen HILFE! Java Basics - Anfänger-Themen 12
H JavaMail: Beim Versenden tritt ein Fehler auf! Java Basics - Anfänger-Themen 4
G Fehler beim ausführen einer JSP Java Basics - Anfänger-Themen 5
K Fehler beim complieren Java Basics - Anfänger-Themen 5
0 Folgender Fehler beim Ausführen eines Java Programms Java Basics - Anfänger-Themen 8
R fehler beim incrementellen schreiben in einen vector Java Basics - Anfänger-Themen 11
O Linux - Fehler beim kompilieren - HILFE Java Basics - Anfänger-Themen 4
T Fehler beim Compilieren Java Basics - Anfänger-Themen 5
G Fehler beim Aufruf eine Javamethode über JSP Java Basics - Anfänger-Themen 8
G Fehler beim erneuten Öffnen von JInternalFrame Java Basics - Anfänger-Themen 7
R Fehler beim Programm Java Basics - Anfänger-Themen 20
G Fehler beim ausführen. Java Basics - Anfänger-Themen 3
W Fehler beim ausführen der Javadateien Java Basics - Anfänger-Themen 3
C Fehler beim build. nur wo? Java Basics - Anfänger-Themen 2
B Fehler beim einbinden eines Packages Java Basics - Anfänger-Themen 6
J Fehler beim Starten der .class Java Basics - Anfänger-Themen 21
V Fehler beim Kompilieren der Unterklasse Java Basics - Anfänger-Themen 2
G Fehler beim kompilieren Java Basics - Anfänger-Themen 18
E Fehler NullPointer beim Ausführen Java Basics - Anfänger-Themen 4
W Fehler beim Compilen Java Basics - Anfänger-Themen 9
D [JCreator] Einrichten - Fehler beim Kompilieren Java Basics - Anfänger-Themen 14
T Chaosprogrammierer hat einen fehler beim casten? Java Basics - Anfänger-Themen 5
D Fehler beim Aufrufen von Instanzvariablen Java Basics - Anfänger-Themen 5
M Problem beim Aufruf einer Methode: Wo is der Fehler? Java Basics - Anfänger-Themen 12
D Fehler beim kompilieren einer Java-Datei (javac) Java Basics - Anfänger-Themen 6
F Fehler beim Schreiben wenn Datei schreibgeschützt abfangen Java Basics - Anfänger-Themen 6
I Fehler beim Compilen Java Basics - Anfänger-Themen 10
T Fehler beim Laden eines Applets Java Basics - Anfänger-Themen 16
O Programm-Fehler beim einlesen von RGB werten Java Basics - Anfänger-Themen 5
F Fraktal fehler beim kompalieren Java Basics - Anfänger-Themen 5
M Fehler beim ein- und auslesen einer Textdatei Java Basics - Anfänger-Themen 5
L Fehler beim ausführen! Java Basics - Anfänger-Themen 14
C Fehler beim Starten einer *.jar Datei Java Basics - Anfänger-Themen 6
C Fehler beim Ausführen Java Basics - Anfänger-Themen 3
G Fehler beim Kompilieren von zwei Klassen Java Basics - Anfänger-Themen 9
Z Fehler beim Ausführen meiner Testdatei in JBuilder Java Basics - Anfänger-Themen 7
T Fehler beim Kompilieren vom Programm Java Basics - Anfänger-Themen 10
S Fehler beim Aufruf meiner Methode, warum? Java Basics - Anfänger-Themen 16
A Fehler beim Lesen von Objekten aus Datei (die zweite) Java Basics - Anfänger-Themen 2
R "implements Serializable" Fehler beim kompilieren Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Anzeige

Neue Themen


Oben