Guten Abend!
Der Titel ist nicht aussagekräftig genug für mein Anliegen:
Ich habe ein Array und eine Variable (Integer), welche mit der Klasse Random mit Zufallszahlen zwischen 1 - 6 gefüllt wird.
Was ich momentan habe ist folgender "Code":
Java:
Random rand =newRandom();int[] iArr =newint[6];int gesuchteZahl;for(int i =0; i < iArr.length; i++){
iArr[i]= gesuchteZahl = rand.nextInt(6)+1;}
Was ich mir denke, aber nicht wirklich umgesetzt bekomme ist folgendes:
Bevor dem Array mit Index 0 beginnend ein Zufallswert zugewiesen wird, muss geprüft werden, ob dieser schon in dem Array vorhanden ist. Falls ja, soll noch mal gewürfelt werden, falls nicht, kann das Array an dieser Stelle den Wert bekommen.
Meines Erachtens nach brauche ich noch eine while-Schleife und einen Zwischenspeicher. Tipps wären sehr nett, bitte nicht direkt die Lösung posten!
@zenpaticx Wenn du es mit Schleife machen willst, dann wäre es gut dir eine Methode zu schreiben, welche einfach nur prüft ob die Zahl schon vorhanden ist:
Java:
privatestaticbooleanistVorhanden(int[] arr,int zahl){// prüfen ob zahl schon in arr vorhanden ist und true/false zurückgeben}
Ansonsten kannst du dafür auch schon die existierenden Array methoden nutzen.
Alternativ kannst du auch einfach ein Array mit den Zahlen 1 bis 6 befüllen und dann zufällig die Reihenfolge vertauschen.
Also wenn es mit einem Array sein soll würde ich das folgendermaßen angehen:
Zwei schleifen und eine if-Bedingung. (Mit deinem Code bist du schon auf einem guten Weg).
In der ersten for-Schleife eine weitere Variable, der du eine zufällige Zahl zuweist und diese deinem Array hinzufügst.
Darauf folgt die zweite Schleife die die if-Bedingung beinhaltet und überprüft ob diese Zahl bereits im Array vorhanden ist. Ist dies der Fall, wird die Zahl quasi wieder entfernt, andernfalls wird die Zahl hinzugefügt.
Java:
publicvoidarrayFuellen(){for(int i =0; i <7; i++){int zahl =lottoZahl();
array[i]= zahl;for(int x =0; x < i; x++){if(zahl == array[x]){
i--;
x =100;}else{
array[i]= zahl;}}}}
Der Vorschlag von @Soloeco enthält einige Fehler (insbesondere eine Endlosschleife). Hier ist es zwar ganz gut verständlich, aber prinzipiell finde ich es auch nicht so gut, die Laufvariable einer for-Schleife im Schleifenkörper zu manipulieren.
Ich würde einen der Vorschläge von @InfectedBytes umsetzen. Am besten gefällt mir dieser:
weil man das Prinzip auch bei großen Arrays verwenden kann, ohne dass die Laufzeit schlecht wird. Wenn das Array fast voll ist, könnte es sonst länger dauern, bis man eine passende Zufallszahl bekommt. Beim Bereich von 1-6 spielt das aber natürlich keine Rolle.
Guten Abend an alle!
Also der Sinn war/ist ja schon wirklich Zufallszahlen zu nehmen, auch wenn dann im Endeffekt bei einem Array mit der Größe von 6 die Zahlen von 1 bis 6 enthalten sind.
Eine Idee von meiner Seite wäre noch soetwas wie das in die Richtung:
- do/while-Schleife, damit beim ersten Mal auf jeden Fall ausgeführt wird. Die Bedingung der do/while-Schleife ist z.B. ein boolean mit nichtVorhanden == true.
- in der Schleife wird eine Methode aufgerufen z.B. checkVorhanden, die prüft, ob eine Zahl an Index i schon vorhanden ist.
Problem: Ich müsste der checkVorhanden ein Integer übergeben und einen boolean zurückbekommen.
Frage: Würde das so gehen? Ich finde die Aufgabe (habe ich mir selbst vorgenommen) doch ein wenig anspruchsvoll