Erste Schritte Lottozahlen richtig generieren.

Juare

Neues Mitglied
Guten Morgen,

ich habe von meinem Lehrer die Aufgabe bekommen ein Lottozahlen Programm zu erstellen.
Dies soll die erstellten Zahlen in ein Array speichern und dann überprüfen ob es eine Zahl doppelt gibt wenn ja soll für diesen Speicherplatz im Array eine neue Zahl generiert werden.

Ich habe nun folgendes Programm geschrieben:

Java:
import java.util.*;
public class lottozahlenGenerator2 {
 
  public static void main(String[] args) {
   
    int[] lottozahlen; //Deklarierung
    int anzahlLottozahlen = 6;
    int lottozahlRand;
    int bereitsVorhanden = 0;
   
    lottozahlen = new int [anzahlLottozahlen]; //Initialisierung
   
   
    for (int i = 0; i < lottozahlen.length; i++){
     
      if(bereitsVorhanden == 1){
        i -= 1; 
      }
     
      lottozahlRand = new Random().nextInt(49) + 1;
     
     
      if(i > 0){

        if(lottozahlen[i-1] != lottozahlRand){
          System.out.println("Zahl "+lottozahlRand+" ist ungleich zur "+i+" Zahl");
        }
        else{
          System.out.println("Diese Zahl ist bereits vorhanden");
          bereitsVorhanden = 1;
        }
         

      }
     
      if(bereitsVorhanden == 0){
        lottozahlen[i] = lottozahlRand;
        }
       
       
    }
       
       
        for(int i = 0; i < lottozahlen.length; i++){
        System.out.println(lottozahlen[i]);
        System.out.println(".");
        }
        }
       
        }

Leider prüft der Code bis jetzt nur ob die vorherige Zahl bereits vorhanden war somit sind doppelte Zahlen nicht ausgeschlossen...

Würde mich sehr über Tipps freuen 🙂

Gruß
Juare
 
Juare hat gesagt.:
Dies soll die erstellten Zahlen in ein Array speichern und dann überprüfen ob es eine Zahl doppelt gibt wenn ja soll für diesen Speicherplatz im Array eine neue Zahl generiert werden
Schritt für Schritt:
- speichere sechs Zahlen im Array
- erst dann prüfe, ob eine Zahl doppelt im Array vorhanden ist
- falls der Fall, generiere eine neue Zahl, welche wiederum nicht im Array vorkommt.
Java:
public class Test
{

    static final int ZAHLEN_OBERGRENZE = 49;
    static final int ZAHLEN_REIHE = 6;

    public static void main(String[] args)
    {
        int[] lotto = new int[Test.ZAHLEN_REIHE];
        erzeugeZahlen(lotto);
        Arrays.sort(lotto);
        System.out.println(Arrays.toString(lotto));
    }

    //Malen nach Zahlen
    static void erzeugeZahlen(int[] array)
    {
        setzeZahlen(array);
        pruefeZahlen(array);
    }

    //Die Methode hast du ja praktisch, daher ist Code sichtbar
    //Bei anderen Methoden helfe ich dir nur, wenn du bereit bist, die Loesungswege selbst zu         beschreiten
    static void setzeZahlen(int[] array)
    {
        for (int i = 0; i < array.length; i++) {
            array[i] = zahl();
        }
    }

    static void pruefeZahlen(int[] array)
    {
       //Hier soll geprueft, ob das Array mehrere gleiche Zahlen besitzt
       //Gehe durch das Array und pruefe mit der Methode zahlVorhanden(),
       //ob eine Zahl im Array mehrfach vorkommt
    }

    static int zahl()
    {
        //Warum diese Methode einzeln?
        return (int) (Math.random() * Test.ZAHLEN_OBERGRENZE) + 1;
    }

    static boolean zahlVorhanden(int i, int[] array)
    {
        //Hier wird die einzelne Zahl geprueft.
        //Dabei gilt: wenn vorhanden, soll die Zahl im Array durch neue,
        //im Array nicht vorhandene Zahl, ersetzt werden.
        //Dabei greife auf die Methode neueZahl()
    }

    static int neueZahl(int i, int[] array)
    {
        //Hier wird eine neue Zahl mittels Methode zahl() generiert.
        //Dabei wird wiederum geprueft, ob die neu generierte Zahl bereits im Array vorkommt,
        //zu Hilfe wieder die Methode zahlVorhanden() und erst, wenn es nicht zutrifft,
        //wird die neue Zahl zurueckgegeben
    }

}
 
Zuletzt bearbeitet:
Das ist einfach ein Online Anbieter für Lotto. Also einfach mal nach Lottoland suchen. Oder bin ich jetzt auf Spam herein gefallen?
 
Damit das Thema ein Ende findet:
[CODE lang="java" title="Lotto.java"]import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Lotto {
public static void main(String[] args) {
List<Integer> zahlen = IntStream.rangeClosed(1, 49).boxed().collect(Collectors.toList());
Collections.shuffle(zahlen);
System.out.println(zahlen.stream().limit(6).sorted().map(String::valueOf).collect(Collectors.joining(", ")));
System.out.println("Superzahl: " + (int) (Math.random() * 10.0));
}
}[/CODE]
 
Man sollte bei sowas immer auch die Fähigkeiten moderner Mehrkernprozessoren ausnutzen, alles andere ist völlig veraltet:

Java:
public static void main(String[] args) throws ExecutionException, InterruptedException {
    ForkJoinPool forkJoinPool = new ForkJoinPool(49);
    final int[] lottoZahlen = forkJoinPool.submit(() ->
                                                  IntStream.rangeClosed(1, 49)
                                                  .unordered()
                                                  .parallel()
                                                  .filter(value -> sleep())
                                                  .limit(6)
                                                  .sorted().toArray())
        .get();

    System.out.println(Arrays.toString(lottoZahlen));
    System.out.println("Superzahl: " + (int) (Math.random() * 10.0));
}

static boolean sleep() {
    try {
        Thread.sleep(1);
        return true;
    } catch (InterruptedException e) {
        return false;
    }
}
 

Zurück
Oben