Zufalls jedoch jede nur einmal

T

TotalAnfänger

Gast
Hallo liebe Forumsmitglieder ich bin ein absoluter Absoluter Anfänger was Java angeht und habe folgendes Problem:

Ich brauche eine Klasse die Eine Zufallszahl zwischen 1 und 43 erstellt (aber nur ganze Zahlen), wobei diese in einem Feld mit gespeichert werden soll. Aber jede Zahl darf genau einmal vorkommen. Mein bisheriger Ansatz liefert ein StackOverFlowExeption:

Java:
        public void Zufall(){
            for(int i = 1; i <= 43; i++){
                int s = 1 + (int) (Math.random() * 42);
                for(int e = 1; e <= 43; e++){
                    if(Zahl[e] != s){                       
                    }
                    else{
                        Zufall();
                    }
                    Zahl[i] = s;
                }
            }
        }

Ich möchte aber am liebsten keine Alternativvorschläge sondern einer "Opimierung" des aus meiner Sicht logischen Lösungswegs.
Außer es geht gar nicht anders.


Danke schon im voraus.
 
S

SlaterB

Gast
du brauchst keine Rekursion, eine while-Schleife schafft dasselbe,
solange versuchen bis genug Zahlen gefunden sind
 

MaZeFrJoTh

Mitglied
Ich habe mich jetzt angemeldet => TotalAnfänger = MaZeFrJoTh
Danke für die schnelle Antwort aber mir ist das Wort Rekursion im Vezug auf Java unbekannt.
 

njans

Top Contributor
Du rufst die Methode selbst wieder auf Zufall() ruft Zufall() auf!
Das ist Rekursion.

Und du bekommst einen StackOverFlow, genau deswegen.
Jede deiner Aufrufe lässt das Array mit zufälligen Zahlen wieder füllen und jedes mal wird dann wieder Zufall() gerufen, wenn zwei gleiche Zahlen aufeinander treffen.
 

MaZeFrJoTh

Mitglied
Wie könnte man das konkret umgehen??
bzw die while- Schleife einbauen??
Wie gesagt, da dies Teil eines Schulprojektes ist bitte keine hochprofessionelle Lösung, bei denen der Lehrer gleich merkt das es nicht von uns ist.
 
Zuletzt bearbeitet:

njans

Top Contributor
1. Keine Rekursion verwenden, wie Slater das schon sagt.
2. Ein Abbruchkriterium finden (eher unwahrscheinlich, da du zum Schluss nur die Chance von 1 zu 43 hast, dass du ne Zahl bekommst, die du noch nicht hast) .

Ansonsten schreibe doch alle Zahlen die du willst ( 1 - 43) in eine Liste rein. Dann ziehst du da zufällig eine raus und löschst sie dann aus der List. Dann hast du das Problem nicht mit Rekursion und der nicht-gleich-verteilten Random() Methode.
 

MaZeFrJoTh

Mitglied
Also 2 Felder erstellen eine davon dann mit von mir eingegebenen Zahlen füllen 1- 43 un die zweite tabelle mit zb schematisch Zufallszahl[1+(int)(Math.random())] = Zahl;
Diese Zeile in eine for Schleife und 43 mal durchlaufen lassen.
Oder??
Ist das richtig so??
 

njans

Top Contributor
Du willst ja in einem "int[] Zahl" deine Zufallszahlen speichern.
Das kannst du machen indem du in deiner Methode eine neue Liste erstellst:
Java:
ArrayList<Integer> interneListe = new ArrayList<Integer>();
Und dann dieses mit einer for-schleife füllst.
Java:
for (int jedeZahl = 0; jedeZahl < 43; jedeZahl ++ )
{
   interneListe.add(jedeZahl + 1);
}
Dann nimmst du einfach beim übertragen der Daten eine zufällige Zahl aus der der ArrayList und überträgst die in dein Array.
Danach löscht du die Zahl aus dem Array. Das ganze machst du dann bis interneListe.size() == 0 ist.
Was mir eben auch eingefallen ist:

Wenn du die ArrayList hast, kannst du auch einfach:
Java:
Collections.shuffle(interneListe );
machen. Damit wird die Liste zufällig geordnet und du hast deine Zufallszahlen. ^^
 

MaZeFrJoTh

Mitglied
ja danke nochmal ich werds gleich ausprobieren.
achja und wie kann man dann auf die Liste zugreiffen? Ich weiß ich bin ein echter Anfänger.
Klappt einwandfrei danke an euch alle für die schnelle Hilfe.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
JavaBeginner22 Java 2 Zufalls zahlen generieren. Java Basics - Anfänger-Themen 11
G Zufalls Array summieren Java Basics - Anfänger-Themen 12
3 Zufalls-Zahlen aus ArrayList generieren & auslesen Java Basics - Anfänger-Themen 6
O Java Zufalls-Verteil-Algorithmus Java Basics - Anfänger-Themen 3
R Zufalls String mit Vorgaben Java Basics - Anfänger-Themen 2
Luk10 Bestimmung eines (Zufalls)Ereignis Java Basics - Anfänger-Themen 10
G Zufalls Animation Java Basics - Anfänger-Themen 9
apple987123 Zufalls Ratezahl Java Basics - Anfänger-Themen 16
S Zufalls Strings erzeugen Java Basics - Anfänger-Themen 8
G Zufalls Lotto Zahlen Ausgeben Java Basics - Anfänger-Themen 16
G Zufalls werte erhalten Java Basics - Anfänger-Themen 9
H zufalls string und zahl erzeugen Java Basics - Anfänger-Themen 14
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
L Bei falscher Eingabe soll NaN zurückgegeben werden, Rückgabetyp jedoch double Java Basics - Anfänger-Themen 3
snipesss IDE zeigt keine Fehler an, Programm wird jedoch nicht ausgeführt. Java Basics - Anfänger-Themen 18
F Map, jedoch mit einem Wertebereich Java Basics - Anfänger-Themen 3
D fehlerfrei kompilliert, kann jedoch nicht ausgeführt werden Java Basics - Anfänger-Themen 21
I Array und variable gleicher wert, wird jedoch nicht erkannt Java Basics - Anfänger-Themen 4
D Seite aufrufen, jedoch nicht im Browser Java Basics - Anfänger-Themen 13
K JavaKara Programm - erfolgreich compiliert jedoch kein Start Java Basics - Anfänger-Themen 12
B eine billige frage, für mich leider jedoch nicht Java Basics - Anfänger-Themen 16
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
L Jede zweite Ziffer entfernen (rekursiv) Java Basics - Anfänger-Themen 6
A Jede x-te Zeile, lösche 10 Zeilen Java Basics - Anfänger-Themen 9
S Jede Ziffer einer Zahl auslesen, damit rechnen und beim Ergebnis wiederholen ? Java Basics - Anfänger-Themen 20
M Primzahlen, nur jede 2te ausgeben Java Basics - Anfänger-Themen 11
V Ein Wort einlesen und dann jede Buchstabe ausgeben Java Basics - Anfänger-Themen 10
M Threads Jede Klasse einem Thread zuweisen Java Basics - Anfänger-Themen 7
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
U Farbe meines Würfels jede sekunde ändern! Java Basics - Anfänger-Themen 5
W Erste Schritte Timer soll jede Sekunde Label aktualisieren Java Basics - Anfänger-Themen 5
R JLabel imageicon jede Sekunde wechseln Java Basics - Anfänger-Themen 3
S Jede Reihenfolge einer zufällig langen Liste ausprobieren Java Basics - Anfänger-Themen 3
J Eine int Variable jede Sekunde um 1 hocnzählen Java Basics - Anfänger-Themen 3
K Swing Fenster jede sec.neuzeichnen Java Basics - Anfänger-Themen 14
A InputStream gibt nur jede 2te Zeile aus Java Basics - Anfänger-Themen 7
J Ein Wort einlesen und dann jede Buchstabe ausgeben Java Basics - Anfänger-Themen 25
J Jede Zeile der Textdatei in ListUI eintragen Java Basics - Anfänger-Themen 2
N jede Zwanzigste... ? Java Basics - Anfänger-Themen 12
E Jede Objektart in Mutterelement erlauben? Java Basics - Anfänger-Themen 3
E Klassendesign: Array für jede Objektart?! Java Basics - Anfänger-Themen 6
Developer_X jede Zeile einer Datei mit einem String verketten Java Basics - Anfänger-Themen 16
S PrepareStatement, jede neue Zeile INT-Wert Java Basics - Anfänger-Themen 5
W Die Methode print() wird 2 mal für jede Seite aufgerufen Java Basics - Anfänger-Themen 9
G jede 2te zeile in vector leer einfügen, wie? Java Basics - Anfänger-Themen 4
N Aus Textdatei jede Zeile in einen String lesen Java Basics - Anfänger-Themen 22
F 2DArray jede Spalte Addieren Java Basics - Anfänger-Themen 8
G Datum und Text in jede beliebige Anwendung einfügen Java Basics - Anfänger-Themen 3
U Jede Sekunde Java Basics - Anfänger-Themen 6
M Braucht jede Klasse eine Schnittstelle ? Java Basics - Anfänger-Themen 4
M Jede Variable als private, protected etc. deklarieren? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben