Lotto Zahlen in Array speichern

target2804

Mitglied
Hallo liebe Community,

habe mich zu Hause folgender Aufgabe gewidmet. Ich möchte 6x eine Zahl zwischen 1 und 49 generieren, und diese hintereinander in einem Array abspeichern. Soweit so gut.
Das Vorgehen ist mir auch bewusst, ich bekomme 6 random Zahlen, die im Array sind.

Mein Problem ist, dass ich gerne immer 6 verschiedene Zahlen hätte. Habe es jetzt seit 2 stunden mit allen möglichen Vorgehensweisen versucht, allerdings bekomme ich, wenn ich das ganze mehrmals wiederhole, irgendwann wieder zwei gleiche Zahlen aufs Array...
Könnt ihr mir evt weiterhelfen?
Hier der Code:
Zur Erklärung: ich will die variable Zufall benutzen, um den ersten generierten wert für zufallszahl dort abzulegen. eigentlich wollte ich die neue zufallszahl immer mit liste[i-1] vergleichen, am 0. element ist das aber nicht möglich und ich bekomme den OutOfBounds error.
Java:
public class Lotto{
 
    public static int [] lotto(){
        boolean getauscht;
        int zufallszahl;
        int [] liste = new int [6];
        int zufall = 0;
     
        for(int i=0; i<liste.length; i++){
            zufallszahl = (int)((Math.random()) * 49 + 1);
            if(zufallszahl == zufall){
                do{
                   zufallszahl = (int)((Math.random()) * 49 + 1);
                }
                while(zufallszahl == zufall);
                liste[i] = zufallszahl;
                zufall = zufallszahl;
            }
            else{
                liste[i] = zufallszahl;
                zufall = zufallszahl;
            }
       
        }
     
        do{
            //evt tauschen
            getauscht = false;
            for(int i=0; i< liste.length-1; i++){
                if(liste[i]>liste[i+1]){
                    int tmp = liste[i];
                    liste[i]=liste[i+1];
                    liste[i+1]=tmp;
                    getauscht = true;
                 
                    //tauschen
                }
         
            }
         
        }
        while(getauscht);
     
        return liste;
    }
 
    public static void ausgabe(int[]liste){
        for(int i = 0; i < liste.length; i++){
            System.out.println(liste[i]);
        }
    }
}
Das Tauschen ist halt dafür da, um die zahlen richtig sortiert im array abzulegen.

und hier die Main Methode zum testen des Programms..
Java:
public class LottoTest{
    public static void main(String [] args){
        int [] ergebnis = Lotto.lotto();
        Lotto.ausgabe(ergebnis);
    }
}
 
Hey target2804,

musst du ein Array benutzten oder geht auch eine ArrayList?
Mit einer Liste würde das ganz einfach gehen und so aussehen:
Java:
        ArrayList<Integer> lottozahlen = new ArrayList<>();
  
        while(lottozahlen.size() < 6) {
            int zufallszahl = (int)(Math.random() * 49 + 1);

            if(!lottozahlen.contains(zufallszahl)) {
                lottozahlen.add(zufallszahl);
            }
        }
  
        System.out.println(lottozahlen);

Eine ArrayList bietet einige Komfort Methoden, die du dir sonst für dein Array selbst schreiben müsstest.
Wie zum Beispiel das Prüfen ob eine Zahl schon vorhanden ist. Und die Liste ist relativ dynamisch und lässt sich erweitern oder einschrumpfen.

Wie gesagt, wenn du ein Array benutzten möchtest, schreibe dir zuerst eine Hilfsmethode die prüft ob der Zufallswert schon im Array enthalten ist.
Dafür musst du einfach den Zufallswert mit allen Werten deines Arrays vergleichen.

Beste Grüße,
Jar
 
Hallo,

erstmal vielen Dank für deine Antwort.
Ja, leider soll ich mit Array arbeiten. Ich hatte ja schon versucht, in der statischen Methode die Überprüfung mit einzubinden, ob eine generierte Zahl schon im Array am Platz davor vorhanden ist.

Allerdings hast du mich jetzt gerade auch drauf gebracht, wieso es nicht funktioniert. Ich bin davon ausgegangen, dass die Folge sortiert ist und ich so nur das Element vorher in einem Array mit der zufällig generierten Zahl vergleichen muss. Das ist natürlich quatsch.
Ich versuche mal, die Überprüfung anzupassen und melde mich dann 🙂


Edit:
Java:
public class Lotto{
   
    public static int [] lotto(){
        boolean getauscht;
        int zufallszahl;
        int [] liste = new int [6];
       
        for(int i=0; i<liste.length; i++){ 
            zufallszahl = (int)((Math.random()) * 49 + 1);
            for(int j=i; j>=0; j--){
                if(zufallszahl == liste[j]){
                    zufallszahl = (int)((Math.random()) * 49 + 1);
                }
                else{
                    liste[i] = zufallszahl;
                }
            }
         
        }  
       
        do{
            //evt tauschen
            getauscht = false;
            for(int i=0; i< liste.length-1; i++){
                if(liste[i]>liste[i+1]){
                    int tmp = liste[i];
                    liste[i]=liste[i+1];
                    liste[i+1]=tmp;
                    getauscht = true;
                   
                    //tauschen
                }
           
            }
           
        }
        while(getauscht);
       
        return liste;
    }
   
    public static void ausgabe(int[]liste){
        for(int i = 0; i < liste.length; i++){
            System.out.println(liste[i]);
        }
    }
}

so muss es aussehen im array, dass es funktioniert.
Vllt kann es einer mal prüfen, aber bei mir hat es bis jetzt immer geklappt.
Danke an jar, für den Denkanstoß 🙂
 
Zuletzt bearbeitet:

Zurück
Oben