Zufallszahl ohne Wiederholung

F

Fragensteller1

Gast
Hallo zusammen

Ich fange gerade an und probiere mich an Zufallszahlen, bei denen keine Zahl doppelt vorkommen darf.
Kann mir jemand bestätigen, ob das so funktioniert? Hab einen "Pulttest" gemacht, also auf Papier und bin der Meinung, dass nun keine doppelte Zahlen mehr vorkommen können.

Bei getrandom kommen ZAHLENvon 1-20 und die Anzahl beträgt 6

Java:
//Zufallszahl ziehen
    	for (i=0;i<ANZAHL;i++){
			
			x=getrandom(ZAHLEN);
				
			//Doppelte Werte abfangen
			for(j=0;j<ANZAHL;j++){
				do{
					for (k=0;k<ANZAHL;k++){
						
						while(x==zufallszahl[k]){
							x=getrandom(ZAHLEN);
						}
						
					}
				}while(x==zufallszahl[j]);
			}
			
			//Zufallszahl in Array hinzufuegen, falls nicht doppelt
			Zufallszahl[i]=x;
		}

Vielen Dank im Voraus
 

HimBromBeere

Top Contributor
Wie wär´s mit ausprobieren? Warum soll man über ein Programm schauen, ob es funktioniert, wenn es nichtmal getestet wurde?
Zweitens: vier ineiander geschachtelte Schleifen seheh mir persönlich sehr suspekt aus. Da solltest du u.U. nochmal drüber nachdenken.
Willst du doppelte Einträge verhindern, würde ich dir sowieso zu einer HasMap raten, wenn´s aber unbedingt ein Array sein soll, schreib dir wenigstens eine Funktion, die überprüft, ob in deinem Array bereits das Element enthalten ist, welches du versuchst hinzuzufügen.
 
Zuletzt bearbeitet:

XHelp

Top Contributor
Das ist ziemlich abgefahren um auf die schnelle zu sagen ob es funktioniert oder nicht. Da lässt sich bestimmt ein Beispiel konstruieren, wo es nicht hinhaut im letzten j und k wert wird eine Zufallszahl generiert, die bereits zuvor auftaucht.
Mach es doch viel einfacher:
Java:
for (i=0;i<ANZAHL;i++){
  do {
    x=getrandom(ZAHLEN);
  } while (isDuplicateExist(zufallszahl, i, x));
  zufallszahl[i] = x;
....
boolean isDuplicateExist(int[] zufallszahl, int index, int x) {
  for (int i=0;i<=index;i++) {
  }
  //gibt true zurück, falls x bereits auftaucht, ansonsten gib false zurück
}


Oder packe einfach deine Zahlen von 1 bis 20 in ein Array, mische es und gib die ersten 6 aus.

@HimBromBeere: was willst du da ausprobieren? Ein mal das Ding starten und dann sagen: "Ja, das ist korrekt und gilt für alle Fälle, weil ein zufälliges Beispiel gerade geklappt hat"?
 
F

Fragensteller1

Gast
Danke für die schnelle Antwort

Ich habe das Programm natürlich schon getestet.
Aber wie oft ist es der Fall, dass man einen Fall übersieht..

Die vielen Schleifen kommen sicherlich auch daher, dass ich noch ein Anfänger bin,
denke aber, dass sich das noch verbessern wird.
Doch die Schleifen sind doch notwendig? Wenn eine Zahl schon im Array vorhanden ist
wird eine neue Zahl gezogen dann geht man aus der Schleife nun ist i+1 an der Reihe, so nun
ist diese Zahl auch vorhanden, eine neue wird gezogen, diese entspricht wieder i...
Das muss verhindert werden durch die do while in der for-schleife

soweit richtig oder?
 
G

Gast2

Gast
Wenn du wissen willst ob die Methode funktioniert, dann teste sie. Entweder per Hand, oder mit nem UnitTest.

Das ganze lässt sich aber auch wesentlich einfacher implementieren ;)

Java:
public static List<Integer> getRandomNumbers(int max, int count) {
	List<Integer> numbers = new ArrayList<Integer>();

	for (int i = 1; i <= max; i++) {
		numbers.add(i);
	}
	
	Collections.shuffle(numbers);
	
	return numbers.subList(0, count);
}
 

HimBromBeere

Top Contributor
Evtl. könntest du auch für die äußere Schleife ein while verwenden, welches solange läuft, wie ein gewissen der Zähler i kleiner als 6 ist. Diesen Zähler zählst du aber nicht mit JEDEM Durchlauf hoch (wie in einer for-Schleife üblich), sondern nur im Erfolgsfall, d.h. dass das i-te Element noch nicht enthalten ist.
 
F

Fragensteller1

Gast
Danke an alle für die Antworten

Ich denke XHelp's Antwort versteh ich am besten und mir
leuchtet auch ein, dass es so funktionieren sollte...
Sehe ich es richtig, dass die Schleife nun einfach ausgelagert wurde?
 
H

hüteüberhüte

Gast
Nehme eine Liste mit Zahlen und mische sie,
nehme eine Liste mit Zahlen (LinkedList) und entnehme Zahlen an einer zufälliger Position,
nehme ein Array und prüfe bei jeder Generierung, ob die neue Zahl noch nicht enthalten ist,
nehme ein HashSet (SET wohl bemerkt) und prüfe wieder, ob die neue Zahl noch nicht enthalten ist.

Ein paar möglichkeiten, die mir auf die schnelle eingefallen sind.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Luk10 Zufallszahl "ohne" eine bestimmte Zahl(en) Java Basics - Anfänger-Themen 8
M zufallszahl ohne doppelvorkommen Java Basics - Anfänger-Themen 2
J Zufallszahl ohne Math.random Java Basics - Anfänger-Themen 4
krgewb Immer dieselbe Zufallszahl Java Basics - Anfänger-Themen 4
M Zufallszahl generieren mit einer linken und rechten Grenze Java Basics - Anfänger-Themen 3
J for Schleife kleinste Zufallszahl finden Java Basics - Anfänger-Themen 25
S Zufallszahl mit Wahrscheinlichkeit Java Basics - Anfänger-Themen 13
brypa Zufallszahl Java Basics - Anfänger-Themen 9
C Zufallszahl + Werte bereich einstellen Java Basics - Anfänger-Themen 2
N Bereich Zufallszahl bestimmen (50 und 100 / 80 und 90) Java Basics - Anfänger-Themen 2
J Zufallszahl funktioniert nicht Java Basics - Anfänger-Themen 27
E Zufallszahl mit Wahrscheinlichkeit Java Basics - Anfänger-Themen 4
T Random soll Zufallszahl beibehalten. Java Basics - Anfänger-Themen 11
F Immer wieder gleiche Zufallszahl? Java Basics - Anfänger-Themen 4
D Zufallszahl zwischen 10 und 99? Java Basics - Anfänger-Themen 5
M Vierstellige Zufallszahl Java Basics - Anfänger-Themen 3
B Methoden Per Buttonklick eine Zufallszahl in ein Numberfield geben Java Basics - Anfänger-Themen 2
S Zufallszahl-Generatoren (Schnittstellen) Java Basics - Anfänger-Themen 14
S Zufallszahl (Statische Attribute und Methoden) Java Basics - Anfänger-Themen 10
M Erste Schritte Zufallszahl Spiel Problem Java Basics - Anfänger-Themen 7
N Zufallszahl beim Eintragen Java Basics - Anfänger-Themen 2
B Methoden Die Sache Mit der Zufallszahl Java Basics - Anfänger-Themen 3
I immer die gleiche Zufallszahl Java Basics - Anfänger-Themen 9
R Zufallszahl Java Basics - Anfänger-Themen 5
P Typecasting für Ganzzahlige Zufallszahl (Math.random) Java Basics - Anfänger-Themen 2
S Zufallszahl erzeugen in 50er Schritten Java Basics - Anfänger-Themen 2
S Gerade bzw. Ungerade Zufallszahl generieren Java Basics - Anfänger-Themen 5
P Erste Schritte Zufallszahl in Ascii-Code umwandeln ?!? Java Basics - Anfänger-Themen 6
M Exception bei Zufallszahl Java Basics - Anfänger-Themen 15
M neue Zufallszahl in Schleife Java Basics - Anfänger-Themen 2
TheKing Zufallszahl die man durch 15 dividieren kann Java Basics - Anfänger-Themen 6
N zufallszahl Java Basics - Anfänger-Themen 3
D Java Zufallszahl Java Basics - Anfänger-Themen 5
N Zufallszahl Java Basics - Anfänger-Themen 2
A Eingabe und Zufallszahl Java Basics - Anfänger-Themen 12
S Zufallszahl -> Schleife Java Basics - Anfänger-Themen 10
TheKing ZufallsZahl im negativbereich Java Basics - Anfänger-Themen 2
S Zufallszahl mit 6 Stellen erzeugen Java Basics - Anfänger-Themen 4
D bei Zufallszahl immer 2 Java Basics - Anfänger-Themen 12
K Zufallszahl Java Basics - Anfänger-Themen 4
Z Alle 15 sek eine Zufallszahl auf Bildschirm Java Basics - Anfänger-Themen 10
M Zufallszahl - kleine Frage Java Basics - Anfänger-Themen 4
S Zufallszahl Java Basics - Anfänger-Themen 9
I Zufallszahl ziwschen 0 und 7 Java Basics - Anfänger-Themen 3
F Zufallszahl in einem bestimmten Intervall Java Basics - Anfänger-Themen 9
B Befehl zum erstellen einer Zufallszahl. Java Basics - Anfänger-Themen 8
S 4-stellige Zufallszahl Java Basics - Anfänger-Themen 4
P Methode funzt nicht => Zufallszahl darf nicht 2x erschein Java Basics - Anfänger-Themen 4
H Zufallszahl Java Basics - Anfänger-Themen 2
K [Java] Zufallszahl als ganze Zahl Java Basics - Anfänger-Themen 5
G Zufallszahl zwischen 2 und n Java Basics - Anfänger-Themen 10
R Zufallszahl random Java Basics - Anfänger-Themen 8
E zufallszahl zwischen 1 und 6 Java Basics - Anfänger-Themen 6
J eigene methode erstellen die eine Zufallszahl generiert. Java Basics - Anfänger-Themen 12
S Spiel: Wer ist näher an der Zufallszahl? Java Basics - Anfänger-Themen 4
N Überprüfung der ZufallsZahl? Java Basics - Anfänger-Themen 2
S Zufallszahl ermitteln Java Basics - Anfänger-Themen 2
C Zufallszahl zwischen... Java Basics - Anfänger-Themen 10
H zufallszahl Java Basics - Anfänger-Themen 2
J Delay erzeugen, ohne Programm zu blockieren Java Basics - Anfänger-Themen 7
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
V JSON-Objs aus JSON-Obj filtern und löschen (Manipulation ohne Kenntnis der vollst. Struktur) Java Basics - Anfänger-Themen 12
O HashTable kann ohne Performance-Verlust in Multithreaded-Anwendungen eingesetzt werden. Java Basics - Anfänger-Themen 6
T Mehrere if bedingungen ohne & Java Basics - Anfänger-Themen 2
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
Mugetsu35 ArrayList Update ohne Index Java Basics - Anfänger-Themen 6
P 2n Potenzieren ohne Math.pow oder pow Java Basics - Anfänger-Themen 8
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
Zentriks Hilfe zu Sieb des Eratosthenes ohne boolean Java Basics - Anfänger-Themen 5
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
R Buttons ohne Funktion Java Basics - Anfänger-Themen 2
JavaBeginner22 TextArea, ohne Zeilenumbruch? Java Basics - Anfänger-Themen 4
frager2345 Programm erstellen ohne Autoboxing und Unboxing Java Basics - Anfänger-Themen 13
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
S Was macht ++ ohne Schleife? Java Basics - Anfänger-Themen 4
berserkerdq2 An selbst ersteller txt Datei immer Text dranhängen, ohne den vorherign Text zu löschen Java Basics - Anfänger-Themen 8
U Methode wird genutzt, ohne dass ich die aufrufe? Java Basics - Anfänger-Themen 4
B Jar Dateien ohne IDE verwenden? Java Basics - Anfänger-Themen 1
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
S Chars vergleichen ohne Betrachtung der Groß und Kleinschreibung Java Basics - Anfänger-Themen 7
javapingu Variablenwerte ändern ohne return Statement? Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
M for schleife ohne geschweifte Klammer Java Basics - Anfänger-Themen 15
KogoroMori21 Variable im Parameter und Ohne Java Basics - Anfänger-Themen 5
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
L Zufälligen Zahlencode, ohne mehrfacher Verwendung einer Ziffer Java Basics - Anfänger-Themen 15
Sinan Arrays auflisten ohne Wiederholung Java Basics - Anfänger-Themen 28
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6
T Variable in for Schleife ansprechen ohne Array ? Java Basics - Anfänger-Themen 25
J Programm beenden ohne System.exit() oder Runtime.exit() Java Basics - Anfänger-Themen 5
S Teilen ohne Rest Java Basics - Anfänger-Themen 15
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben