Do while Befehl verkürzen?

LiVo

Mitglied
Nabend liebe leute :)
Habe da so ein Lotto Spiel gemacht. Funktioniert toll, ich habe es sogar geschafft das die varible zahl nicht doppelt vorkommt.
Allerdings ist es sehr sehr aufwändig gewesen, und wenn ich mir vorstelle das es mehr als 6 variblen sind die sich gleichen können wird es eine gewaltige Tipperei.

Gibt es eine Möglichkeit, diesen do while Befehl zu verkürzen, oder ihn durch einen "simpleren" zu ersetzen?




Java:
import java.util.Random;
import java.util.Arrays;

public class Lotto6aus49 {

	public static void main (String[] args) {
		int[] zahl = new int [6];
		Random  rnd = new Random();
		
		
do{
		for (int i=0 ; i<6; i++) {
			zahl[i] = rnd.nextInt(49)+1;
			
		}
 
		Arrays.sort(zahl);}
		
while (zahl[0]==zahl[1] || zahl[1]==zahl[2] || zahl[2]==zahl[3] || zahl[3]==zahl[4] || zahl[4]==zahl[5]);
		
    System.out.println ("Die Lottozahlen lauten: " );
    for (int y=0; y<6; y++ ) {
    	System.out.print(zahl[y]+" ");   
    
    
    			}
    		}
	}



Danke!
 
G

Gast2

Gast
Du könntest das so lösen:

Java:
    public static void main(String[] args) {
        List<Integer> numbers = getLottozahlen(49, 6);

        for (int i : numbers) {
            System.out.println(i);
        }
    }

    private static List<Integer> getLottozahlen(int maxNr, int count) {
        if (count > maxNr) {
            throw new IllegalArgumentException("count > maxNr");
        }

        // fill array list
        List<Integer> numbers = new ArrayList<Integer>();
        for (int i = 1; i <= maxNr; i++) {
            numbers.add(i);
        }

        // shuffle
        Collections.shuffle(numbers);

        List<Integer> result = numbers.subList(0, count);
        return result;
    }
 

Antoras

Top Contributor
Oder so:
Code:
[B]while[/B] length of Array <= 6
  i := new random number
  newNum := true
  [B]foreach[/B] e := next Array element
    [B]if[/B] i equals e then newNum := false
  [B]end[/B]
  [B]if[/B] newNum equals true then add i to Array
[B]end[/B]
print Array
 

Antoras

Top Contributor
Spielverderberin :pueh:
Aber stimmt schon. Je nach dem wie gut der Code für die Erzeugung der Zufallszahlen ist, könnte das schon ziemlich ins Auge gehen...
 

Landei

Top Contributor
Ein shuffle, egal ob das vorgrammierte aus Collections (wie oben bei EikeB) oder ein selbst geschriebenes, ist für solche Probleme die eleganteste Lösung.

Es gibt auch eine Lösung mit Zufallszahlen ziehen, aber die ist schwieriger zu implementieren:
Man hat ein Array der Größe 6. Dann zieht man eine Zahl von 1 bis 49 und packt sie ins erste Feld. Dann ziehlt man eine Zahl von 1 bis 48. Ist sie größer/gleich der ersten Zahl, addiert man 1. Dann packt man sie ins zweite Feld. Dann zieht man eine Zahl von 1 bis 47. Ist sie größer als die erste, addiert man 1. Ist sie danach größer als die zweite, addiert man nochmal 1. Dann kommt sie ins dritte Feld. Nach diesem Schema zieht man alle Zahlen, die man braucht.
 
G

Gast2

Gast
Die idee ist auch nicht schlecht, aber ich frage mich ob man dann nicht die Wahrscheinlichkeit für die oberen Zahlen reduziert.
Hat man z.b. noch keine 49 gezogen, wird man das ab der dritten Ziehung auch nichtmehr können.
 

Landei

Top Contributor
Wieso? Wenn du bei der zweiten Ziehung eine 48 ziehst, wird diese auf 49 erhöht, genauso wenn du bei der 3. Ziehung eine 47 ziehst u.s.w (du muss jedesmal +1 rechnen, wenn die Zahl größer gleich einer vorangegangenen ist, wenn du also schon 3,7,4,2 hast und die 45 ziehst, erhöhst du 4 mal und landest bei der 49)
 

r.w.

Bekanntes Mitglied
Wieso? Wenn du bei der zweiten Ziehung eine 48 ziehst, wird diese auf 49 erhöht, genauso wenn du bei der 3. Ziehung eine 47 ziehst u.s.w (du muss jedesmal +1 rechnen, wenn die Zahl größer gleich einer vorangegangenen ist, wenn du also schon 3,7,4,2 hast und die 45 ziehst, erhöhst du 4 mal und landest bei der 49)

Wenn ich das richtig sehe, ist dann aber der Wert der noch zu ziehenden Zahl nicht mehr
unbedingt ein zufälliger aus der Menge der noch zur Verfügung stehenden Zahlen, sondern wird auch
durch die bereits gezogenen beeinflusst. Oder hab' ich da etwas falsch verstanden?
 
G

Gast2

Gast
Der Wert ist noch zufällig, aber du kannst so keinen Wert doppelt ziehen. Nachdem du einen Wert gezogen hast wird alles was größer ist einfach auf +1 gemappt... sozusagen...
 

Landei

Top Contributor
Nein, es wird dadurch nicht beeinflusst. Sagen wir, du hast eine 17 gezogen. Nächstes mal willst du aus allen Zahlen außer 17 gleichverteilt die nächste ziehen. Nun kannst du schlecht sagen: "Gib mir eine Zufallszahl von 1 bis 16 oder 18 bis 49". Es ist einfach praktischer, die nächste Zahl von 1 bis 48 zu ziehen und dann den Wertebereich zu korrigieren, so daß die 17 nicht mehr vorkommen kann, aber dafür die 49. Trotzdem wird gleichverteilt gezogen. Wenn du das nicht glaubst, probiere es doch einfach mit einer genügend großen Anzahl Ziehungen aus.
 

LiVo

Mitglied
Naja ^^ ja...
Ich verstehs noch nich so ganz. was sicherlich daran liegt das ich mit java Programmierung erst seit letzter woche was zu tun habe.
Was ist die API und wie guck ich da rein? gibts da nen link zu?
Oder anders.
Wie müsste ich eure /deinen code, bei mir einfügen/ersetzen?
 
G

Gast2

Gast
Die API ist deine Bibel ;)
Java Platform SE 6

Ich erklär dir trotzdem mal meinen Code.

Java:
    private static List<Integer> getLottozahlen(int maxNr, int count) {
Statische Methode die eine List<Integer> zurückgibt, da stehen dann deine 6 Zahlen drin.

Java:
        if (count > maxNr) {
            throw new IllegalArgumentException("count > maxNr");
        }
Wenn count > maxNr ist wird ne Exception geworfen.

Java:
        // fill array list
        List<Integer> numbers = new ArrayList<Integer>();
        for (int i = 1; i <= maxNr; i++) {
            numbers.add(i);
        }
Füllt die List numbers mit den Zahlen 1..maxNr, die Zahlen sind jetzt noch sortiert.

Java:
        // shuffle
        Collections.shuffle(numbers);
Jetzt werden die Zahlen in der Liste gemischt.

Java:
        List<Integer> result = numbers.subList(0, count);
        return result;
Kopiert den Kopf der Liste (übergibst du für count 6, werden die ersten 6 Zahlen kopiert) und gibt die Liste zurück.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M While-Schleife mit Wartezeit Java Basics - Anfänger-Themen 15
Ranger229 Endless loop in while Schleife Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
Ostkreuz While Schleife neustarten Java Basics - Anfänger-Themen 20
S Erste Schritte do-while Schleife Münzwurf Java Basics - Anfänger-Themen 1
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
P Best Practice While loop schleife Java Basics - Anfänger-Themen 5
S Erste Schritte While Schleifen Java Basics - Anfänger-Themen 11
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
R do while Schleife Verständnisfrage Java Basics - Anfänger-Themen 2
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
Say do-while Syntak Java Basics - Anfänger-Themen 3
A Return in While Schleife Java Basics - Anfänger-Themen 6
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
J do..while Schleife Java Basics - Anfänger-Themen 14
W Wiederkehrende Konsolen-Anzeige mit do-While?! Java Basics - Anfänger-Themen 33
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
java-starter Erste Schritte Mit While Schleifen Programme schreiben Java Basics - Anfänger-Themen 4
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
B Zuweisungen und Methodenaufrufe in Bedingung der while Schleife? Java Basics - Anfänger-Themen 2
JavaBeginner22 Würfeln bis 6 while Schleife Java Basics - Anfänger-Themen 13
G while.next() Verständnisfrage Java Basics - Anfänger-Themen 16
L while Schleife mit 2 Bedingung endet nicht Java Basics - Anfänger-Themen 3
D Array mit while-schleife Java Basics - Anfänger-Themen 12
B do while Schleife Java Basics - Anfänger-Themen 3
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
SergioCK Do while Schleife wiederholen Java Basics - Anfänger-Themen 14
Informatikf Methoden While Schleife Java Basics - Anfänger-Themen 3
M While Schleife? Java Basics - Anfänger-Themen 4
C Sind die while-Schleifen richtig in for-Schleifen ersetzt worden? Java Basics - Anfänger-Themen 8
Poppigescorn Quersumme Berechnen mit einer While Schleife Java Basics - Anfänger-Themen 13
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
H Kann eine while-Schleife ein Programm blockieren? Java Basics - Anfänger-Themen 8
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
A Wie schaffe ich das eine while Schleife addiert danach subtrahirt? Java Basics - Anfänger-Themen 1
Aeon Erste Schritte Preise berechnen mit do-while Java Basics - Anfänger-Themen 9
J for /while Schleife Java Basics - Anfänger-Themen 5
A While Schleife - buubelsort methode Java Basics - Anfänger-Themen 2
J Wie kann ich hier eine While schleife einbauen? Java Basics - Anfänger-Themen 3
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
M While-Schleifen-Fehler Java Basics - Anfänger-Themen 4
S Do-While-Schleife Java Basics - Anfänger-Themen 2
S While Schleife Java Basics - Anfänger-Themen 4
S Do-While Schleife Java Basics - Anfänger-Themen 6
J Von While zu for Java Basics - Anfänger-Themen 42
G While/If Programm Java Basics - Anfänger-Themen 2
L String in Do-While-Schleife Abbruchkriterium Java Basics - Anfänger-Themen 1
CptK Methoden While-Schleife so lange ausführen, wie Methode etwas zurückgibt Java Basics - Anfänger-Themen 2
G Flussdiagramm-Do while Java Basics - Anfänger-Themen 4
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
B Verschachtelung von For-Schleife in While Schleife Java Basics - Anfänger-Themen 14
G while schleife Java Basics - Anfänger-Themen 11
G while schleife mit array Java Basics - Anfänger-Themen 12
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
I Do-While / Kalkulator / Bitte um Hilfe Java Basics - Anfänger-Themen 9
G While schleife Java Basics - Anfänger-Themen 2
mor16Euro Erste Schritte Wie nennt man eine While oder For schleife die nie Ausgeführt wird Java Basics - Anfänger-Themen 5
C Verständnisfrage bezüglich der Do-While Schleife Java Basics - Anfänger-Themen 9
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
N while Schleife wird nicht beendet, obwohl Sie hätte breaken sollen Java Basics - Anfänger-Themen 4
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
O Erste Schritte Zahlendreieck mit While Java Basics - Anfänger-Themen 2
D Break Sprungmarken Problem einer While True in While True Java Basics - Anfänger-Themen 6
A Erste Schritte while-Schleife Java Basics - Anfänger-Themen 38
W While-Loop unterbrechen Java Basics - Anfänger-Themen 4
X While Do schleife funtioniert nicht Java Basics - Anfänger-Themen 5
J 2 "while"-Anweisungen in einer do-Schleife? Java Basics - Anfänger-Themen 4
W while Schleife und Bedingung Java Basics - Anfänger-Themen 11
T While Schleife funktioniert nicht Java Basics - Anfänger-Themen 14
J Input/Output Strings aneinander reihen mit while schleife Java Basics - Anfänger-Themen 25
M Methoden while liefert nur den ersten Datensatz Java Basics - Anfänger-Themen 12
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
P a cannot be resolved bei einer do while Schleife Java Basics - Anfänger-Themen 1
J While Schleife Java Basics - Anfänger-Themen 19
S While-Schleifen Ausgabe als String? Java Basics - Anfänger-Themen 1
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
Z Return in While-Schleife Java Basics - Anfänger-Themen 7
N Methode mit While-Schleife und If-Bedingung und Array-Initialisierung Java Basics - Anfänger-Themen 4
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
helldunkel While Schleife trotz false Java Basics - Anfänger-Themen 4
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
M Erste Schritte while boolean=false läuft nur bei true??? Java Basics - Anfänger-Themen 23
R While-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 24
b1ck while-Schleife Java Basics - Anfänger-Themen 10
b1ck Integer initialisieren bei do-while-Schleife Java Basics - Anfänger-Themen 11
kilopack15 DoWhile-Schleife als While-Schleife darstellen Java Basics - Anfänger-Themen 9
A While-Schleife funktioniert nicht! Java Basics - Anfänger-Themen 33
A Verständnisproblem Ausgabe Do-While-Schleife Java Basics - Anfänger-Themen 3
E Alphabet mit einer while Schleife ausgeben Java Basics - Anfänger-Themen 3
I Mehre While-Schleifen hintereinander Java Basics - Anfänger-Themen 13
T while schleife starten , beeneden und wieder Starten Java Basics - Anfänger-Themen 8
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
F Reached end while parsing Java Basics - Anfänger-Themen 6
B Passwort prüfen bis eindeutig - while Schleife? Java Basics - Anfänger-Themen 11
$ Multiplikations-Rechner mit while Schleife Java Basics - Anfänger-Themen 8
T Variablen Var aus While-Schleife abfragen -.-' Java Basics - Anfänger-Themen 9
snipesss Schlüsselworte While Schleife Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben