Zufallszahlen fuer Lotto generieren

Um EikeBs Antwort etwas auszuführen:

Eine List mischt man mit java.util.Collections.shuffle(list)

Will man selber "ziehen", bietet sich ein Set an:
Java:
Random random = new Random();
Set<Integer> set = new HashSet<Integer>();
while(set.size() < 6) {
   set.add(random.nextInt(49) + 1);
}

Man kann auch erst eine Zahl von 1 bis 49 ziehen, dann eine von 1 bis 48 und "korrigieren" (eins addieren wenn sie größer/gleich der ersten ist, dann eine von 1 bis 47 ziehen, gegenüber den ersten zwei Zahlen "korrigieren" u.s.w.
 
Man kann auch erst eine Zahl von 1 bis 49 ziehen, dann eine von 1 bis 48 und "korrigieren" (eins addieren wenn sie größer/gleich der ersten ist, dann eine von 1 bis 47 ziehen, gegenüber den ersten zwei Zahlen "korrigieren" u.s.w.
also +1 ist ja nicht so schön,
wenn als erstes die 3 gezogen wurde hat danach die 4 eine doppelt so hohe Chance wie alle anderen Zahlen,
wieso eigentlich nur noch 1-48, 1-47 usw, sind die hohen Zahlen nicht mehr erlaubt?

---

das Thema gibts ja öfter hier, eine sehr schöne Variante für 'ohne Doppelte' ist dabei doch immer:
eine Liste mit 1-49 füllen, dann durchmischen, Collections.shuffle(),
und dann die ersten 6 Zahlen verwenden (edit: ok, schon genannt, wollte aber nicht nur meckern 😉 )
 
Seh da kein großen Vorteil drin, denke soll er einfach für sich entscheiden was ihm besser gefällt.

der Vorteil, ist dass du nicht dauern über dein array laufen musst um zu sehen ob die zahl schon drinnen ist. In einem Set sind die Elemente einzigartig, das heißt du kannst einfügen bis 6 Elemente drinnen sind (wie oben gezeigt) und kannst dir sicher sein, dass die zahlen unterschiedlich sind.
 
also ich erzeuge so 6 zufallszahlen zwischen 1 und 49
bisschen gegoogelt und das kam raus :

Java:
package zufallszahlen;
public class Main
{
    public static int zufaelligeZahl(int n) {
    double dezimalZahl = Math.random();
    int ganzZahl = (int)Math.round( dezimalZahl * n );
    return ganzZahl;

    }
    public static void main( String[] args )
    {
       for(int i=0; i<6; i++){
        int zufall = zufaelligeZahl(49);
         System.out.println("Zufaellige Zahl: " + zufall);
         }//ende for
    }//ende public static void main( String[] args )
}//ende public class Main
 
mir stellt sich grade eine frage die vill ach zu dem thema passen könnte nehmen wir an ich schreibe 6 zahlen (vom user eingegeben) ind ein array
dann fülle ich ein 2tes array mit zufallszahlen

und könnte ich dann sagen vergleiche mir array 1 mit array 2??
 
und könnte ich dann sagen vergleiche mir array 1 mit array 2??
ja natürlich,

Java:
  int[] a1 = {12,2,5};
      int[] a2 = {12,2,5};      
      System.out.println(Arrays.equals(a1, a2)); // richtig: da die elemente verglichen werden
      System.out.println(a1.equals(a2)); //falsch: da die referenzen verglichen werden
 
also +1 ist ja nicht so schön,
wenn als erstes die 3 gezogen wurde hat danach die 4 eine doppelt so hohe Chance wie alle anderen Zahlen,
wieso eigentlich nur noch 1-48, 1-47 usw, sind die hohen Zahlen nicht mehr erlaubt?
Nein, hat die vier nicht. Wenn ich die 3 ziehe, wird die nächste Zahl erhöht, wenn sie größer oder gleich 3 ist. Wenn ich also als nächstes eine 48 ziehe, wird daraus eine 49.

Die Reihenfolge ist aber wichtig, bei dem Verfahren müssen die Zahlen immer aufsteigend geordnet sein. Bei einer neuen Zahl geht man dann alle vorherigen durch, und erhöht, wenn sie größer oder gleich ist. Damit kann ich keine doppelten Werte erhalten, und wenn ich aus 49,48,47... ziehe auch nie einen "Überlauf".
 
Ich gebs zu, ich habe nicht jedes Detail nachgelesen, aber wenn die nächste zu ziehende Zahl grösser sein muss als die grösste bisher gezogene Zahl, erhalten höhere zahlen automatisch eine grössere Warscheinlichkeit und das sollte ja wohl nicht sein.

Oder stell dir vor, die erste gezogene Zahl ist schon die höchste aller Möglichkeiten - was dann?

Sollte ich total daneben liegen, grinst einfach und ignoriert mein Posting ;-)
 
Ich gebs zu, ich habe nicht jedes Detail nachgelesen, aber wenn die nächste zu ziehende Zahl grösser sein muss als die grösste bisher gezogene Zahl, erhalten höhere zahlen automatisch eine grössere Warscheinlichkeit und das sollte ja wohl nicht sein.

Oder stell dir vor, die erste gezogene Zahl ist schon die höchste aller Möglichkeiten - was dann?

Sollte ich total daneben liegen, grinst einfach und ignoriert mein Posting ;-)

Leute, das ist doch wirklich nicht so schwer: Zahl ziehen von 1 bis 49, sagen wir 10. Nächste Zahl ziehen von 1 bis 48, sagen wir 15. Ist sie größer oder gleich als die vorige, um eins erhähen, also 16. Jetzt haben wir 10, 16. Nächste Zahl ziehen von 1 bis 47, sagen wir 15. Größer oder gleich als 10, also um eins erhöhen, mach 16. Größer oder gleich 16, also eins erhöhen, macht 17. Wir haben jetzt 10,16,17. Nächste Zahl ziehen von 1 bis 46, sagen wir 46. Größer als alle drei vorherigen, also dreimal erhöhen, also 49. Damit haben wir 10,16,17,49. Nächste Zahl ziehen von 1 bis 45, sagen wir 4. Ist kleiner als alle, bleibt 4. Damit haben wir 4,10,16,17,49. Nächste Zahl ziehen von 1 bis 44, sagen wir 6. Ist größer als 4 aber kleiner als der Rest, also einmal erhöhen auf 7. Endergebnis 4,7,10,16,17,49. Keine Ahnung wie ich noch erklären soll, dass da alles gleichverteilt ist und nichts doppelt auftritt. Ist eigentlich klar wie Kloßbrühe.
 
Zuletzt bearbeitet:
ja natürlich,

Java:
  int[] a1 = {12,2,5};
      int[] a2 = {12,2,5};      
      System.out.println(Arrays.equals(a1, a2)); // richtig: da die elemente verglichen werden
      System.out.println(a1.equals(a2)); //falsch: da die referenzen verglichen werden

Hallo erstmal, bin neu hier 🙂

Hier gibt es ein kleines Problem denke ich.
So wie sich der Thread bisher liest, will der OP einen User 6 Zahlen eingeben lassen und dann vergleichen, ob die Zahlen die gleichen sind, die vorher zufällig ermittelt wurden.

Aber die "equals" Methode aus Arrays überprüft afaik auch die Reihenfolge der Elemente, oder nicht?
D.h. in diesem Fall könnten die gleichen 6 Zahlen in beiden Arrays vorhanden sein, wenn sie aber in einer unterschiedlichen Reihenfolge enthalten sind, kriegt man ein "false".

Habs nicht extra nachgeschaut jetzt, aber ich hab das so in Erinnerung.
 
dann muss man halt vorher sortieren... oder händisch suchen mit zwei verschachtelten schleifen... fals es eine Schulaufgabe ist werd er die Arrays Klasse eh nicht verwenden dürfen...
 
dann muss man halt vorher sortieren... oder händisch suchen mit zwei verschachtelten schleifen... fals es eine Schulaufgabe ist werd er die Arrays Klasse eh nicht verwenden dürfen...


Die Lösungsansätze sind mir klar, ging eher darum, dass der OP nicht einen virtuellen 6er im Lotto erzielt und dann nichtmal ein "Juhu" auf der Kommandozeile angezeigt bekommt 😉

Und warum sollte er die Arrays Klasse nicht verwenden dürfen?
 
Und warum sollte er die Arrays Klasse nicht verwenden dürfen?
In den ersten paar vorlesungsübungen ist es sinvoll die Leute die utill, collection klassen nicht benutzen zu lassen.

Klar wenn ich als übung eine verkette Liste machen lassen will und die schreiben new LinkedList();

oder ich will ihnen hash sort , bubble sort beibringen und die machen Collection.sort macht das wenig sinn ;-)
 

Zurück
Oben