# Lotto Spiel



## Pazago (26. Mrz 2011)

Hallo,

Ich möchte mir ein eigenes Lotto spiel programmieren. Das mit den random Zahlen habe ich einigermaßen Schnell hin bekommen 
Jetzt möchte ich aber mit Hilfe der Fallunterscheidung Einstellen das automatisch angezeigt wird wie viele Richtige man hat. Mit hilfe der If-Anweisung hab ich es für eine Richtige hinbekommen aber wie sieht es dann bei 2 oder mehreren aus????:L???:L

Wäre super wenn ihr mir helfen könntet:rtfm:


Liebe Grüße Pazago 


P.s ich programiere mit dem JavaEditor und bin anfänger 

Mein Code 
	
	
	
	





```
int a, b;
    
         a = nFZahl1.getInt();
         b = (int) ((Math.random()* 49 )+1);
         nF1.setInt(b);
         
         a = nFZahl2.getInt();
         b = (int) ((Math.random()* 49 )+1);
         nF2.setInt(b);
         
         a = nFZahl3.getInt();
         b = (int) ((Math.random()* 49 )+1);
         nF3.setInt(b);
         
         a = nFZahl4.getInt();
         b = (int) ((Math.random()* 49 )+1);
         nF4.setInt(b);
         
         a = nFZahl5.getInt();
         b = (int) ((Math.random()* 49 )+1);
         nF5.setInt(b);
         
         a = nFZahl6.getInt();
         b = (int) ((Math.random()* 49 )+1);
         nF6.setInt(b);
         
         if (nFZahl1 == nF1) {
         JOptionPane.showMessageDialog(null,"Wenigstens eine");
         }
          if (nFZahl2 == nF2) {
          JOptionPane.showMessageDialog(null,"Wenigstens eine");
          }
           if (nFZahl3 == nF3) {
           JOptionPane.showMessageDialog(null,"Wenigstens eine");
           }
            if (nFZahl4 == nF4) {
            JOptionPane.showMessageDialog(null,"Wenigstens eine");
            }
             if (nFZahl5 == nF5) {
             JOptionPane.showMessageDialog(null,"Wenigstens eine");
             }
              if (nFZahl6 == nF6) {
              JOptionPane.showMessageDialog(null,"Wenigstens eine");
              }
  }
```


----------



## hdi (26. Mrz 2011)

> Mit hilfe der If-Anweisung hab ich es für eine Richtige hinbekommen


sicher nicht  Das war dann nur Zufall. Denn: Was du mit == prüfst sind gar nicht die getippten / gezogenen Zahlen. Was auch immer nFZahlX und nFX ist, es sind keine Zahlen, sondern komplexere Objekte (Objekte irgendeiner Klasse). Welche, das sehen wir jetzt aus deinem Code nicht.

Aber was du eig. prüfen müsstest:


```
if ( nFZahl1.getInt() == nF1.getInt() ) { ... }
```

usw


----------



## Pazago (26. Mrz 2011)

> Was auch immer nFZahlX und nFX ist


 Ich habe es in einer Frame Programmiert dies sind meine Klassen namen nFZahlX ist die Zahl die man eingegeben hat und nFX ist die zufallszahl.

Danke ich werd mich mal gleich dran machen :toll:


----------



## dehlen (26. Mrz 2011)

habe mal gerade auf die Schnelle ein kleines Lotto Programm geschrieben anhand dessen du dich orientieren kannst

Da ich das gerade auf die schnelle geschrieben habe ist es hundsmiserabel aber es läuft 

```
import java.io.*;

public class Lotto {

public static void main(String[] args)  throws IOException {
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
int f = 0;

String eingabe;
int eins,zwei,drei,vier,fuenf,sechs;

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
System.out.println("g eingeben um Zahlen zu generieren");
eingabe = input.readLine();

if(eingabe.equals("g")) {
a = (int) ((Math.random()* 49 )+1);
b = (int) ((Math.random()* 49 )+1);
c = (int) ((Math.random()* 49 )+1);
d = (int) ((Math.random()* 49 )+1);
e = (int) ((Math.random()* 49 )+1);
f = (int) ((Math.random()* 49 )+1);
} 

if(a==b||a==c||a==d||a==e||a==f) {
a++;
}
if(b==a||b==c||b==d||b==e||b==f) {
b++;
}
if(c==b||c==a||c==d||c==e||c==f) {
c++;
}
if(d==b||d==c||d==a||d==e||d==f) {
d++;
}
if(e==b||e==c||e==d||e==a||e==f) {
e++;
}
if(f==b||f==c||f==d||f==e||f==a) {
f++;
}

 

System.out.println("Geben sie nun ihre 6 Zahlen ein: ");
eins = Integer.parseInt(input.readLine());
zwei = Integer.parseInt(input.readLine());
drei = Integer.parseInt(input.readLine());
vier = Integer.parseInt(input.readLine());
fuenf = Integer.parseInt(input.readLine());
sechs = Integer.parseInt(input.readLine());

if(eins>49||eins< 1||zwei>49||zwei<1||drei>49||drei<1||vier>49||vier<1||fuenf>49||fuenf<1||sechs>49||sechs<1) {
System.out.println("Falsche Angaben ! Ihre Zahlen dürfen nur zwischen 49 und 1 sein!");
System.exit(0);
}

System.out.println("Die gezogenen Zahlen: "+a+" "+b+" "+c+" "+d+" "+e+" "+f);
System.out.println("Ihre Zahlen: "+eins+" "+zwei+" "+drei+" "+vier+" "+fuenf+" "+sechs);
System.out.println("Richtige Zahlen: ");
if(eins==a||eins==b||eins== c||eins==d||eins==e||eins==f) {
System.out.println(""+eins);

}
if(zwei == a||zwei == b||zwei == c||zwei == d||zwei == e||zwei == f) {
System.out.println(""+zwei);
}
if(drei == a||drei == b||drei == c||drei == d||drei == e||drei == f) {
System.out.println(""+drei);
}

if(vier == a||vier == b||vier == c||vier == d||vier == e||vier == f) {
System.out.println(""+vier);
}

if(fuenf == a||fuenf == b||fuenf == c||fuenf == d||fuenf == e||fuenf == f) {
System.out.println(""+fuenf);
}

if(sechs == a||sechs == b||sechs == c||sechs == d||sechs == e||sechs == f) {
System.out.println(""+sechs);
}
}
}
```

was du jetzt noch verbessern könntest wäre : die zahlen in einem array zu speichern dann gehen die überprüfungen auch einfacher und mit weniger code


----------



## dehlen (26. Mrz 2011)

Also um das ganze mit einem Array zu machen leg dir zwei Arrays an einmal für die genrierten Zahlen und eins für deine eingegeben Zahlen

nun brauchst du eine for-Schleife die bis 6 zählt und dann einfach jedem arrayindex eine zahl zuweisen 
und am ende prüfen ob:
if(genArray_ == zahlArray) {
System.out.println(.....);
}_


----------



## hdi (26. Mrz 2011)

Hier auch von mir mal eine hingerotzte Version:


```
public class Lotto {

    public static void main(String[] args) {

	int[] tipp = new int[6];
	Scanner scan = new Scanner(System.in);
	for (int i = 0; i < 6; i++) {
	    System.out.print("Bitte " + (i + 1) + ".te Zahl eingeben: ");
	    tipp[i] = scan.nextInt();
	}

	System.out.print("Die Ziehung lautet: ");
	int[] ziehung = new int[6];
	Random r = new Random();
	for (int i = 0; i < 6; i++) {
	    ziehung[i] = r.nextInt(49) + 1; // 1-49
	    System.out.print(ziehung[i] + " ");
	}
	System.out.println();

	int richtige = 0;
	for (int i = 0; i < 6; i++) {
	    for (int j = 0; j < 6; j++) {
		if (ziehung[i] == tipp[j]) {
		    richtige++;
		    break;
		}
	    }
	}
	System.out.println("Sie haben " + richtige + " Richtige!");
    }
}
```

Natürlich sind hier diverse Fälle noch nicht abgedeckt. zB: Bei der zufälligen Ziehung kann es noch sein dass mehrmals die selbe Zahl gezogen wird, was zu einem falschen Ergebnis führt. Oder: Der Benutzer gibt irgendeinen Text ein statt Zahlen, dann fliegt ne Exception usw. Das müsste man halt nacharbeiten, aber das kannste schon mal als Grundgerüst nehmen


----------



## dehlen (26. Mrz 2011)

Ja schau dir das Beispiel von hdi an da kannst du sehen wie ich das mit den Arrays meine 
wenn man nicht weiterkommt dann hilft es immer sehr sich das Problem mit Blatt und Stift aufzuzeichnen
wie du hier siehst hat hdi die überpüfung
ziehung_ == tipp dadurch musst du nicht die mühseligen überprüfungen wie in meiner version machen weil du eben das ganze in ein Array packst_


----------



## hdi (26. Mrz 2011)

> wie du hier siehst hat hdi die überpüfung
> ziehung_ == tipp_


_

ziehung == tipp[*j*], nur damit es hier keine Missverständnisse gibt _


----------



## Pazago (26. Mrz 2011)

Vielen Dank für eure schnelle Hilfe:applaus:
bin gerad dabei meine Codes zu überarbeiten ich hof mal es klappt jetzt


----------



## atPazago (26. Mrz 2011)

Ich hab kaum Ahnung von Lotto, weiß aber, dass 6 aus 49 gezogen werden und die Wahrscheinlichkeit, alle richtig zu haben, sehr gering ist.

Aus dem Ausschnitt geht jetzt nicht hervor, Variablen welchen Typs nFZahlXXX usw. sind. Das Posten komplettierten Quellcodes wäre hilfreich.

Zuerst sollte man überlegen, was gebraucht wird. 6 Zahleingaben, dann 6 Zufallszahlen, dann die Prüfung welche Eingaben mit welchen Zufallszahlen übereinstimmen. Mit welcher Struktur speichert man beide Sachen, um hinterher unproblematisch die Anzahl der Übereinstimmungen zu ermitteln, auch um keine doppelten Zahlen zu erlauben? HashSet.


```
HashSet<Integer> eingaben = new HashSet<Integer>();
        HashSet<Integer> zufall = new HashSet<Integer>();

        Scanner eing = new Scanner(System.in);
        System.out.println("Gebe jetzt 6 Zahlen, jeweils gefolgt von Enter, ein:");
        while (eingaben.size() < 6) {
            eingaben.add(eing.nextInt());
        }

        System.out.println("Danke, jetzt wird gezogen");
        while (zufall.size() < 6) {
            final int zuf = (int) (Math.random() * 49) + 1;
            System.out.println("zuf: " + zuf);
            zufall.add(zuf);
        }

        System.out.println("Jetzt verglichen");
        int gleiche = 0;
        for (Integer i : zufall) {
            if (eingaben.contains(i)) {
                System.out.println("Es ist gleich: " + i);
                gleiche++;
            }
        }

        System.out.println("gleiche: " + gleiche);
```

In Zeile 7 wird die nächste Zahl in die Set gelegt, wenn nicht bereits vorhanden. Das sichert, dass keine doppelten Elemente vorhanden sind. Man müsste die Eingabe eigentlich noch weiter prüfen, ob der Benutzer auch keinen Blödsinn eingegeben hat - aber so wird seine Chance, richtige zu haben, eben geringer. In Zeile 12 wird die Zufallszahl erzeugt. Das generierte double wird mit 49d multipliziert, was ein double mit Wert zwischen [0,49[ ergibt, das dann mittels einengender Topkonvertierung gecastet "auf ein" int wird, welchem dann 1 addiert wird, weil der bei der Konvertierung immer abgerundet wird.

Was man sich nur noch asehn muss: Autoboxing, type cast, HashSet, Math, Kontrollstrukturen (while, for, for-each), ++/---Syntax usw.


----------



## dehlen (26. Mrz 2011)

deine Lösung in allen Ehren ist wirklich richtig gut gelungen aber meinst du nicht das das ein wenig Overkill für ein kleines LottoSpiel ist 
besonders in Bezug auf den TO der gerade Java am lernen ist da mit for-each Schleifen oder mit
HashSet<Integer> zu kommen ist vielleicht einer der schönereren Lösungen aber für den Anfang eher ungeeigenet

Bitte nicht falsch verstehen ist ja nicht böse gemeint


----------



## atPazago (26. Mrz 2011)

Naja, er lernt wahrscheinlich mehr dabei, wenn er die Fehler aufgezeigt bekommt, die sich in seinen eigenem Code befinden, aber dafür müsste er erst weiteren code posten, und bis dahin probieren sich eben alle anderen an ihrer eigenen Lösung


----------



## hdi (26. Mrz 2011)

edit: bull***


----------



## Pazago (26. Mrz 2011)

@ dehlen was genau meinst du bei deinem Quelltext bei der Stelle:

```
if(a==b||a==c||a==d||a==e||a==f) {
a++;
}
if(b==a||b==c||b==d||b==e||b==f) {
b++;
}
if(c==b||c==a||c==d||c==e||c==f) {
c++;
}
if(d==b||d==c||d==a||d==e||d==f) {
d++;
}
if(e==b||e==c||e==d||e==a||e==f) {
e++;
}
if(f==b||f==c||f==d||f==e||f==a) {
f++;
```
Ich hab irgend wie das Gefühl das es der Springende Punkt ist nur ich weiß nicht genau was gemeint ist. Das in der Klammer soll prüfen ob die Zahlen gleich sind nehme ich an und für was steht das X++???:L


Ich erläutere noch mal meinen Quelltext da es zu dem ja anscheinend verständnis Probleme gab:

Bei dem Nachfolgenden Text hab ich, da ich das ganze als Frame Programmiere, den einzelnen Feldern wo du Zufallszahlen später stehen ihr Zuffals zahl gegeben.
Hierbei ist nF1-6 das Feld wo die Zahl erscheint.

```
int a, b;

         a = nFZahl1.getInt();
         b = (int) ((Math.random()* 49 )+1);
         nF1.setInt(b);

         a = nFZahl2.getInt();
         b = (int) ((Math.random()* 49 )+1);
         nF2.setInt(b);

         a = nFZahl3.getInt();
         b = (int) ((Math.random()* 49 )+1);
         nF3.setInt(b);

         a = nFZahl4.getInt();
         b = (int) ((Math.random()* 49 )+1);
         nF4.setInt(b);

         a = nFZahl5.getInt();
         b = (int) ((Math.random()* 49 )+1);
         nF5.setInt(b);

         a = nFZahl6.getInt();
         b = (int) ((Math.random()* 49 )+1);
         nF6.setInt(b);
```


Dann war meine Idee das ich mit Hilfe der Fallunterscheidung Anzeigen lasse wie viele Richtigen man hat dort bin ich aber dann gescheitert da mein Bescheidenes wissen in Java nicht mehr aussreicht 

nFZahl1-6 ist die Zahl die der Benutzter eingegeben hat also die getippte Zahl
und nF1-6 die Random Zahl

```
if (nFZahl1 == nF1) {
         JOptionPane.showMessageDialog(null,"Wenigstens eine");
         }
          if (nFZahl2 == nF2) {
          JOptionPane.showMessageDialog(null,"Wenigstens eine");
          }
           if (nFZahl3 == nF3) {
           JOptionPane.showMessageDialog(null,"Wenigstens eine");
           }
            if (nFZahl4 == nF4) {
            JOptionPane.showMessageDialog(null,"Wenigstens eine");
            }
             if (nFZahl5 == nF5) {
             JOptionPane.showMessageDialog(null,"Wenigstens eine");
             }
              if (nFZahl6 == nF6) {
              JOptionPane.showMessageDialog(null,"Wenigstens eine");
              }
```


----------



## dehlen (26. Mrz 2011)

das bedeutet nichts anderes das 
a überprüft wird ob es den gleichen wert wie b oder wie c oder wie d oder wie e oder wie f hat und wenn ja dann wird a um eins erhöht daher das a++;
damit es nicht vorkommen kann das bei den generierten zahlen gleiche zahlen rauskommen können


----------



## atPazago (27. Mrz 2011)

Pazago hat gesagt.:


> Bei dem Nachfolgenden Text hab ich, da ich das ganze als Frame Programmiere, den einzelnen Feldern wo du Zufallszahlen später stehen ihr Zuffals zahl gegeben.
> Hierbei ist nF1-6 das Feld wo die Zahl erscheint.



Das versteht niemand, das ist ja noch nicht mal ein halbwegs richtiger Satz.

Du hast für jede eingegebene Zahl ein Objekt gemacht und gibst diesen Objekten jeweils eine Zufallszahl, richtig? Dann kommt es also auch auf die richtige Reihenfolge an. Das entspräche nicht mehr dem uns bekannten Lotto. Aber natürlich wäre das so veränderte Lotto auch vorstellbar. Die Objekte müssten dann eine Methode haben, als Attribute vorhandene oder übergebene Zahlen mit den ursprünglich den Objekten angehörenden Zahlen zu vergleichen. Soweit klar?


----------



## Pazago (27. Mrz 2011)

> Du hast für jede eingegebene Zahl ein Objekt gemacht und gibst diesen Objekten jeweils eine Zufallszahl, richtig?


 Richitg



> Dann kommt es also auch auf die richtige Reihenfolge an.


Was genau meinst du damit? es soll schon ein richtiges Lotto sein nur hab ich in meinem Ur-Quelltext den Fehler gemacht das ich dachte das das bei Lotte die Zahl 1 mit der ersten gezogenen Zahl übereinstimmen muss und nicht auch mit der zweiten stimmen würde.


----------



## Pazago (27. Mrz 2011)

Ich hab jetzt alles noch mal überdenhaufen geworfen und mich bei der Programierung ziemlich stark an den Coedes von dehlen orientiert aber es kommt egal was ich mache immer die selbe Fehler meldung:


```
Compiliere C:\Users\Sebastian_2\Documents\Schule\LOTTO.java mit Java-Compiler
LOTTO.java:92:6: cannot find symbol
symbol  : method setBounds(int,int,int,int)
location: class java.awt.Dimension
    d.setBounds(256, 120, 33, 24);
     ^
LOTTO.java:93:6: cannot find symbol
symbol  : method setText(java.lang.String)
location: class java.awt.Dimension
    d.setText("");
     ^
LOTTO.java:94:7: cannot find symbol
symbol  : method add(java.awt.Dimension)
location: class java.awt.Panel
    cp.add(d);
      ^
3 errors
```

Hier der Quelltext 
	
	
	
	





```
import java.awt.*;
import java.awt.event.*;
import java.io.*;


/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 27.03.2011
  * @author
  */

public class LOTTO extends Frame {
  // Anfang Attribute
  private Label label1 = new Label();
  private NumberField eins = new NumberField();
  private NumberField zwei = new NumberField();
  private NumberField sechs = new NumberField();
  private NumberField fuenf = new NumberField();
  private NumberField vier = new NumberField();
  private NumberField drei = new NumberField();
  private Label laZahl = new Label();
  private Label laRichtig = new Label();
  private NumberField a = new NumberField();
  private NumberField f = new NumberField();
  private NumberField e = new NumberField();
  private NumberField d = new NumberField();
  private NumberField c = new NumberField();
  private NumberField b = new NumberField();
  private Button buSpielen = new Button();
  private Button buNeu = new Button();
  private Button buExit = new Button();
  // Ende Attribute

  public LOTTO(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { dispose(); }
    });
    int frameWidth = 446;
    int frameHeight = 430;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Panel cp = new Panel(null);
    add(cp);
    // Anfang Komponenten

    label1.setBounds(24, 24, 42, 16);
    label1.setText("Lotto:");
    label1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label1);
    eins.setBounds(112, 56, 33, 24);
    eins.setText("");
    cp.add(eins);
    zwei.setBounds(160, 56, 33, 24);
    zwei.setText("");
    cp.add(zwei);
    sechs.setBounds(352, 56, 33, 24);
    sechs.setText("");
    cp.add(sechs);
    fuenf.setBounds(304, 56, 33, 24);
    fuenf.setText("");
    cp.add(fuenf);
    vier.setBounds(256, 56, 33, 24);
    vier.setText("");
    cp.add(vier);
    drei.setBounds(208, 56, 33, 24);
    drei.setText("");
    cp.add(drei);
    laZahl.setBounds(24, 56, 79, 16);
    laZahl.setText("Ihre Zahlen:");
    laZahl.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(laZahl);
    laRichtig.setBounds(0, 120, 106, 16);
    laRichtig.setText("Richtige Zahlen:");
    laRichtig.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(laRichtig);
    a.setBounds(112, 120, 33, 24);
    a.setText("");
    cp.add(a);
    f.setBounds(352, 120, 33, 24);
    f.setText("");
    cp.add(f);
    e.setBounds(304, 120, 33, 24);
    e.setText("");
    cp.add(e);
    d.setBounds(256, 120, 33, 24);
    d.setText("");
    cp.add(d);
    c.setBounds(208, 120, 33, 24);
    c.setText("");
    cp.add(c);
    b.setBounds(160, 120, 33, 24);
    b.setText("");
    cp.add(b);
    buSpielen.setBounds(8, 184, 393, 25);
    buSpielen.setLabel("Spielen");
    buSpielen.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        buSpielen_ActionPerformed(evt);
      }
    });
    cp.add(buSpielen);
    buNeu.setBounds(8, 224, 393, 25);
    buNeu.setLabel("Neus Spiel");
    buNeu.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        buNeu_ActionPerformed(evt);
      }
    });
    cp.add(buNeu);
    buExit.setBounds(8, 264, 393, 25);
    buExit.setLabel("Exit");
    buExit.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        buExit_ActionPerformed(evt);
      }
    });
    cp.add(buExit);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

// Anfang Methoden
 public void buSpielen_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    int e = 0;
    int f = 0;

    String eingabe;
    int eins,zwei,drei,vier,fuenf,sechs;

    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Zahlen eingeben");
    eingabe = input.readLine();

    if(eingabe.equals("g")) {
    a = (int) ((Math.random()* 49 )+1);
    b = (int) ((Math.random()* 49 )+1);
    c = (int) ((Math.random()* 49 )+1);
    d = (int) ((Math.random()* 49 )+1);
    e = (int) ((Math.random()* 49 )+1);
    f = (int) ((Math.random()* 49 )+1);
    }

    if(a==b||a==c||a==d||a==e||a==f) {
    a++;
    }
    if(b==a||b==c||b==d||b==e||b==f) {
    b++;
    }
    if(c==b||c==a||c==d||c==e||c==f) {
    c++;
    }
    if(d==b||d==c||d==a||d==e||d==f) {
    d++;
    }
    if(e==b||e==c||e==d||e==a||e==f) {
    e++;
    }
    if(f==b||f==c||f==d||f==e||f==a) {
    f++;
    }



    System.out.println("Ihre Zahlen");
    eins = Integer.parseInt(input.readLine());
    zwei = Integer.parseInt(input.readLine());
    drei = Integer.parseInt(input.readLine());
    vier = Integer.parseInt(input.readLine());
    fuenf = Integer.parseInt(input.readLine());
    sechs = Integer.parseInt(input.readLine());

    if(eins>49||eins< 1||zwei>49||zwei<1||drei>49||drei<1||vier>49||vier<1||fuenf>49||fuenf<1||sechs>49||sechs<1) {
    System.out.println("Falsche Angaben ! Die Zahlen dürfen nur zwischen 49 und 1 sein!");
    System.exit(0);
    }

    System.out.println("Die gezogenen Zahlen: "+a+" "+b+" "+c+" "+d+" "+e+" "+f);
    System.out.println("Ihre Zahlen: "+eins+" "+zwei+" "+drei+" "+vier+" "+fuenf+" "+sechs);
    System.out.println("Richtige Zahlen: ");
    if(eins==a||eins==b||eins== c||eins==d||eins==e||eins==f) {
    System.out.println(""+eins);

    }
    if(zwei == a||zwei == b||zwei == c||zwei == d||zwei == e||zwei == f) {
    System.out.println(""+zwei);
    }
    if(drei == a||drei == b||drei == c||drei == d||drei == e||drei == f) {
    System.out.println(""+drei);
    }

    if(vier == a||vier == b||vier == c||vier == d||vier == e||vier == f) {
    System.out.println(""+vier);
    }

    if(fuenf == a||fuenf == b||fuenf == c||fuenf == d||fuenf == e||fuenf == f) {
    System.out.println(""+fuenf);
    }

    if(sechs == a||sechs == b||sechs == c||sechs == d||sechs == e||sechs == f) {
    System.out.println(""+sechs);
    }


    
    }

  public void buNeu_ActionPerformed(ActionEvent evt) {
    a.setInt(0);
    b.setInt(0);
    c.setInt(0);
    d.setInt(0);
    e.setInt(0);
    f.setInt(0);
    
    eins.setInt(0);
    zwei.setInt(0);
    drei.setInt(0);
    vier.setInt(0);
    fuenf.setInt(0);
  }

  public void buExit_ActionPerformed(ActionEvent evt) {
    System.exit(0);
  }

  // Ende Methoden

  public static void main(String[] args) {
    new LOTTO("LOTTO");
  }
}
```


----------



## dehlen (27. Mrz 2011)

was soll NumberField sein ? ersetzte es mal mit JTextField 

Ps: schreibe mal vor alle deine komponenten ein J also JLabel statt Label , da AWT veraltet ist
Wegen dem setBounds muss ich mal eben schauen dein Code ist sehr unübersichtlich


----------



## jgh (27. Mrz 2011)

so mal auf die schnelle...neben einigen anderen Fehlern:

es gibt bei dir die Variable 
	
	
	
	





```
d
```
 doppelt:


```
private NumberField d = new NumberField();

...

 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
```


----------



## dehlen (27. Mrz 2011)

Also du solltest dir das mit der Gui Programmierung nochmal anschauen und du benutze viele veraltete Sachen

z.B button.setLabel("Neues Spiel");
könntest du einfach schon beim erstellen so machen:
JButton button = new JButton("Neues Spiel");

und d ist doppelt deklariert

EDIT:
Was soll setInt bitteschön sein oO


----------



## Pazago (27. Mrz 2011)

numberField ist das Feld wo die Zufalls Zahlen generiert werden und die eigenen Zahlen eingetragen werden. Es können auch nur zahlen eingetragen werden.

Wie verhalten die sich gegenüber da wir bis jetzt nur gelernt haben die AWT console zu benutzten.


----------



## dehlen (27. Mrz 2011)

achja was mir noch aufgefallen ist
:

```
buSpielen_ActionPerformed(evt);
```

was soll das sein ?!


----------



## Pazago (27. Mrz 2011)

ich hatte mir gedacht das ich damit das ganze wieder auf 0 setzt


----------



## dehlen (27. Mrz 2011)

ja aber du kannst deine methode nicht so schreiben :

```
public void buNeu_ActionPerformed(ActionEvent evt) {
```

dass muss so aussehen:


```
public void buNeu_ActionPerformed() {
```

und dann im ActionListener einfach die Methode aufrufen:

```
buNeu_ActionPerformed();
```


----------



## dehlen (27. Mrz 2011)

So lässt sich sich kompilieren ob alles so klappt wie du es dir vorgestellt hattest sei mal dahingestellt:

```
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
 
 public class LOTTO extends JFrame {
  // Anfang Attribute
  private JLabel label1 = new JLabel();
  private JTextArea eins = new JTextArea();
  private JTextArea zwei = new JTextArea();
  private JTextArea sechs = new JTextArea();
  private JTextArea fuenf = new JTextArea();
  private JTextArea vier = new JTextArea();
  private JTextArea drei = new JTextArea();
  private JLabel laZahl = new JLabel();
  private JLabel laRichtig = new JLabel();
  private JTextArea a = new JTextArea();
  private JTextArea f = new JTextArea();
  private JTextArea e = new JTextArea();
  private JTextArea d = new JTextArea();
  private JTextArea c = new JTextArea();
  private JTextArea b = new JTextArea();
  private JButton buSpielen = new JButton();
  private JButton buNeu = new JButton();
  private JButton buExit = new JButton();
  // Ende Attribute
 
  public LOTTO(String title) throws IOException {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { dispose(); }
    });
    int frameWidth = 446;
    int frameHeight = 430;
    setSize(frameWidth, frameHeight);
   
   JPanel cp = new JPanel(null);
    add(cp);
    // Anfang Komponenten
 
    label1.setBounds(24, 24, 42, 16);
    label1.setText("Lotto:");
    label1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label1);
    eins.setBounds(112, 56, 33, 24);
    eins.setText("");
    cp.add(eins);
    zwei.setBounds(160, 56, 33, 24);
    zwei.setText("");
    cp.add(zwei);
    sechs.setBounds(352, 56, 33, 24);
    sechs.setText("");
    cp.add(sechs);
    fuenf.setBounds(304, 56, 33, 24);
    fuenf.setText("");
    cp.add(fuenf);
    vier.setBounds(256, 56, 33, 24);
    vier.setText("");
    cp.add(vier);
    drei.setBounds(208, 56, 33, 24);
    drei.setText("");
    cp.add(drei);
    laZahl.setBounds(24, 56, 79, 16);
    laZahl.setText("Ihre Zahlen:");
    laZahl.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(laZahl);
    laRichtig.setBounds(0, 120, 106, 16);
    laRichtig.setText("Richtige Zahlen:");
    laRichtig.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(laRichtig);
    a.setBounds(112, 120, 33, 24);
    a.setText("");
    cp.add(a);
    f.setBounds(352, 120, 33, 24);
    f.setText("");
    cp.add(f);
    e.setBounds(304, 120, 33, 24);
    e.setText("");
    cp.add(e);
    d.setBounds(246, 120, 33, 24);
    d.setText("");
    cp.add(d);
    c.setBounds(208, 120, 33, 24);
    c.setText("");
    cp.add(c);
    b.setBounds(160, 120, 33, 24);
    b.setText("");
    cp.add(b);
    buSpielen.setBounds(8, 184, 393, 25);
    buSpielen.setLabel("Spielen");
    buSpielen.addActionListener(new ActionListener()  {
      public void actionPerformed(ActionEvent evt)  {
          try {
        buSpielen_ActionPerformed();
    }
    catch(IOException e) {
        
    }
        
      }
    });
    cp.add(buSpielen);
    buNeu.setBounds(8, 224, 393, 25);
    buNeu.setLabel("Neus Spiel");
    buNeu.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        buNeu_ActionPerformed();
      }
    });
    cp.add(buNeu);
    buExit.setBounds(8, 264, 393, 25);
    buExit.setLabel("Exit");
    buExit.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        buExit_ActionPerformed();
      }
    });
    cp.add(buExit);
    // Ende Komponenten
 
    setResizable(false);
    setVisible(true);
  }
 
// Anfang Methoden
 public void buSpielen_ActionPerformed() throws IOException {
    // TODO hier Quelltext einfügen
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    int e = 0;
    int f = 0;
 
    String eingabe;
    int eins,zwei,drei,vier,fuenf,sechs;
 
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Zahlen eingeben");
    eingabe = input.readLine();
 
    if(eingabe.equals("g")) {
    a = (int) ((Math.random()* 49 )+1);
    b = (int) ((Math.random()* 49 )+1);
    c = (int) ((Math.random()* 49 )+1);
    d = (int) ((Math.random()* 49 )+1);
    e = (int) ((Math.random()* 49 )+1);
    f = (int) ((Math.random()* 49 )+1);
    }
 
    if(a==b||a==c||a==d||a==e||a==f) {
    a++;
    }
    if(b==a||b==c||b==d||b==e||b==f) {
    b++;
    }
    if(c==b||c==a||c==d||c==e||c==f) {
    c++;
    }
    if(d==b||d==c||d==a||d==e||d==f) {
    d++;
    }
    if(e==b||e==c||e==d||e==a||e==f) {
    e++;
    }
    if(f==b||f==c||f==d||f==e||f==a) {
    f++;
    }
 
 
 
    System.out.println("Ihre Zahlen");
    eins = Integer.parseInt(input.readLine());
    zwei = Integer.parseInt(input.readLine());
    drei = Integer.parseInt(input.readLine());
    vier = Integer.parseInt(input.readLine());
    fuenf = Integer.parseInt(input.readLine());
    sechs = Integer.parseInt(input.readLine());
 
    if(eins>49||eins< 1||zwei>49||zwei<1||drei>49||drei<1||vier>49||vier<1||fuenf>49||fuenf<1||sechs>49||sechs<1) {
    System.out.println("Falsche Angaben ! Die Zahlen dürfen nur zwischen 49 und 1 sein!");
    System.exit(0);
    }
 
    System.out.println("Die gezogenen Zahlen: "+a+" "+b+" "+c+" "+d+" "+e+" "+f);
    System.out.println("Ihre Zahlen: "+eins+" "+zwei+" "+drei+" "+vier+" "+fuenf+" "+sechs);
    System.out.println("Richtige Zahlen: ");
    if(eins==a||eins==b||eins== c||eins==d||eins==e||eins==f) {
    System.out.println(""+eins);
 
    }
    if(zwei == a||zwei == b||zwei == c||zwei == d||zwei == e||zwei == f) {
    System.out.println(""+zwei);
    }
    if(drei == a||drei == b||drei == c||drei == d||drei == e||drei == f) {
    System.out.println(""+drei);
    }
 
    if(vier == a||vier == b||vier == c||vier == d||vier == e||vier == f) {
    System.out.println(""+vier);
    }
 
    if(fuenf == a||fuenf == b||fuenf == c||fuenf == d||fuenf == e||fuenf == f) {
    System.out.println(""+fuenf);
    }
 
    if(sechs == a||sechs == b||sechs == c||sechs == d||sechs == e||sechs == f) {
    System.out.println(""+sechs);
    }
 
 
    
    }
 
  public void buNeu_ActionPerformed() {
    a.setText("");;
    b.setText("");
    c.setText("");
    d.setText("");
    e.setText("");
    f.setText("");
    
    eins.setText("");
    zwei.setText("");
    drei.setText("");
    vier.setText("");
    fuenf.setText("");
    sechs.setText("");
    
  }
 
  public void buExit_ActionPerformed() {
    System.exit(0);
  }
 
  // Ende Methoden
 
  public static void main(String[] args) throws IOException {
    new LOTTO("LOTTO");
  }
}
```


----------



## Pazago (27. Mrz 2011)

Bei deiner Version läuft es 
nur generriert er keine zufallszahl o.0


hab bei meiner Version das noch mal verbessert die alten Fehler sind weg :toll:
Jetzt zeigt er mir aber neue Fehler an. Kann es sein das ein input fehlt?


```
LOTTO.java:144:29: unreported exception java.io.IOException; must be caught or declared to be thrown
    eingabe = input.readLine();
                            ^
LOTTO.java:177:43: unreported exception java.io.IOException; must be caught or declared to be thrown
    eins = Integer.parseInt(input.readLine());
                                          ^
LOTTO.java:178:43: unreported exception java.io.IOException; must be caught or declared to be thrown
    zwei = Integer.parseInt(input.readLine());
                                          ^
LOTTO.java:179:43: unreported exception java.io.IOException; must be caught or declared to be thrown
    drei = Integer.parseInt(input.readLine());
                                          ^
LOTTO.java:180:43: unreported exception java.io.IOException; must be caught or declared to be thrown
    vier = Integer.parseInt(input.readLine());
                                          ^
LOTTO.java:181:44: unreported exception java.io.IOException; must be caught or declared to be thrown
    fuenf = Integer.parseInt(input.readLine());
                                           ^
LOTTO.java:182:44: unreported exception java.io.IOException; must be caught or declared to be thrown
    sechs = Integer.parseInt(input.readLine());
                                           ^
7 errors
```


----------



## Haave (27. Mrz 2011)

Ich finde es ja keine gute Idee, dass da mehrere Methoden "ActionPerformed" im Namen haben (mal abgesehen von diesen fürchterlichen Bezeichnern "buExit_", "buNeu_" etc.). actionPerformed() ist die Methode der Klasse ActionListener und es ruft (zumindest bei mir) falsche Assoziationen hervor, wenn da Methoden sind, die so ähnlich heißen wie actionPerformed(), aber im Grunde nichts damit zu tun haben.

Warum nicht so?

```
@Override
public void actionPerformed(ActionEvent e) {
    beendeSpiel();
}
```
oder so (je nach Bedarf)?

```
@Override
public void actionPerformed(ActionEvent e) {
    starteNeuesSpiel();
}
```

Und verwende doch bitte Arrays und setze nicht jede Variable a, b, c, d, e, f oder eins, zwei, drei, vier, fuenf sechs einzeln 
dehlens Code halte ich für kein besonders gutes Beispiel bezüglich Programmierstil :/ (ein "Lotto"-Konstruktor wirft eine IOException wtf :bahnhof: )


----------



## jgh (27. Mrz 2011)

du musst das ganze in einen [c]try and catch[/c] block packen....ABER

warum machst du eine GUI und lässt die Zahlen über die Console eingeben?


----------



## Pazago (27. Mrz 2011)

> Und verwende doch bitte Arrays und setze nicht jede Variable a, b, c, d, e, f oder eins, zwei, drei, vier, fuenf sechs einzeln


Das habe ich leider noch nicht gerlent .... wie gesagt ich bin totaler Anfänger 



> dehlens Code halte ich für kein besonders gutes Beispiel bezüglich Programmierstil :/ (ein "Lotto"-Konstruktor wirft eine IOException wtf  )



Kann schon sein das der Stil unter aller sau ist aber ich versteh ihn 




> warum machst du eine GUI und lässt die Zahlen über die Console eingeben?



Beim richtigen Lotto musst du deine Zahlen ja auch selber eingeben oder hab ich das jetzt falsch verstanden???:L


----------



## Haave (27. Mrz 2011)

Pazago hat gesagt.:


> Beim richtigen Lotto musst du deine Zahlen ja auch selber eingeben oder hab ich das jetzt falsch verstanden???:L


Nein, jgh meint es so, dass es eher unüblich bzw. nicht so schön ist, Konsolen- und GUI-Programme zu vermischen. Ergo: lieber nur Konsolen-Ein- und Ausgaben oder nur GUI-Ein- und Ausgaben.


----------



## Pazago (27. Mrz 2011)

okey Merk ich mir 

wie kann ich diesen Fehler beheben?
Wenn ich den weg habe müsste es eigentlich Funktionieren
Ich weiß leider nicht was mit 


```
IOException; must be caught or declared to be thrown
```

gemeint ist.


```
LOTTO.java:145:29: unreported exception java.io.IOException; must be caught or declared to be thrown
    eingabe = input.readLine();
                            ^
LOTTO.java:178:43: unreported exception java.io.IOException; must be caught or declared to be thrown
    eins = Integer.parseInt(input.readLine());
                                          ^
LOTTO.java:179:43: unreported exception java.io.IOException; must be caught or declared to be thrown
    zwei = Integer.parseInt(input.readLine());
                                          ^
LOTTO.java:180:43: unreported exception java.io.IOException; must be caught or declared to be thrown
    drei = Integer.parseInt(input.readLine());
                                          ^
LOTTO.java:181:43: unreported exception java.io.IOException; must be caught or declared to be thrown
    vier = Integer.parseInt(input.readLine());
                                          ^
LOTTO.java:182:44: unreported exception java.io.IOException; must be caught or declared to be thrown
    fuenf = Integer.parseInt(input.readLine());
                                           ^
LOTTO.java:183:44: unreported exception java.io.IOException; must be caught or declared to be thrown
    sechs = Integer.parseInt(input.readLine());
                                           ^
7 errors
```


----------



## dehlen (27. Mrz 2011)

@Haave mir ist klar das mein Programm sehr hässlich war, doch ich habe ja nur das Programm dahingehend verbessert, damit er es wenigstens kompilieren kann
natürlich sollten a,b,c,d,e,f usw einfach in ein array gepackt werden und natürlich sollte man im Konstruktor nicht throw IOException schreiben, nur hatte ich es hingeschrieben, damit er wenigstens sein Programm verbessern kann


----------



## Haave (27. Mrz 2011)

Simple, unschöne Lösung wäre, dass du einfach in jeden Methodenkopf 
	
	
	
	





```
throws IOException
```
 vor die öffnende geschweifte Klammer schreibst. Was das genau bedeutet, solltest du dann beizeiten mal nachlesen.
Du kannst auch, wie jgh schrieb, die beanstandete Methode mit try-catch umhüllen, aber vielleicht wird das hier schon zu kompliziert.


----------



## dehlen (27. Mrz 2011)

Pazago hat gesagt.:


> okey Merk ich mir
> 
> wie kann ich diesen Fehler beheben?
> Wenn ich den weg habe müsste es eigentlich Funktionieren
> ...



Du musst halt eine Exception werfen also try {
Anweisung
} 
catch(Typ Objekt) {
Anweisung
}

Desweiteren solltest du dir wirklich die Arrays angucken und nicht begründen da 12 variablen zu nehmen nur weil du es verstehst
ich hatte das lediglich als Beispiel gepostet damit du den Sinn verstehst Programmiertechnisch gesehen ist das Beispiel absolut miserabel, um nur Gui zu nehmen musst du halt die zahlen per setText() bzw getText() setzten bzw auslesen


----------



## Pazago (27. Mrz 2011)

> Du kannst auch, wie jgh schrieb, die beanstandete Methode mit try-catch umhüllen, aber vielleicht wird das hier schon zu kompliziert.



Jap was mit dem try-catch gemeint ist versteh ich nicht ganz gibt es noch einen anderen unkomlizierteren weg?

ICh versuchs mal 
Zum Verständnis was bedeutet/bewirkt das try -catch?


----------



## Pazago (27. Mrz 2011)

Der Fehler wird immer 
	
	
	
	





```
eins = Integer.parseInt(input.readLine[B]HIER[/B]());
```
 angezeigt heißt das es dann so Aussehen muss? 
	
	
	
	





```
eins = Integer.parseInt(input.readLine
try{()});
```

Ne das macht keinen Sinn ;(;(;(


```
try {
eins}
catch { 
= Integer.parseInt(input.readLine());
}
```

???:L???:L???:L


----------



## Haave (27. Mrz 2011)

Durch Raten wird das nichts.
Bitte lies dir mal das hier durch: Galileo Computing :: Java ist auch eine Insel – 6 Exceptions


----------



## Pazago (27. Mrz 2011)

Habs gelesen nur was ist bei meinen 6 Fehlern die Ausname???:L


```
eins = Integer.parseInt(input.readLine());
    zwei = Integer.parseInt(input.readLine());
    drei = Integer.parseInt(input.readLine());
    vier = Integer.parseInt(input.readLine());
    fuenf = Integer.parseInt(input.readLine());
    sechs = Integer.parseInt(input.readLine());
```


----------



## jgh (27. Mrz 2011)

```
try {
			 eins = Integer.parseInt(input.readLine());
    zwei = Integer.parseInt(input.readLine());
    drei = Integer.parseInt(input.readLine());
    vier = Integer.parseInt(input.readLine());
    fuenf = Integer.parseInt(input.readLine());
    sechs = Integer.parseInt(input.readLine());

		} catch (NumberFormatException nf) {
// was auch immer du dann ausgeben, oder machen möchtest
}
```


----------



## dehlen (27. Mrz 2011)

Habe mich mal gerade hingesetzt und dein Programm überarbeitet, so dass es hoffentlich auch @Haave gefällt 

Das heißt ich habe dir die Gui geschrieben, jetzt musst du nur noch die Methoden schreiben und die entsprechenden ActionListener befüllen, das sollte nicht mehr das Problem sein, doch mit meiner Varianten hast du jetzt gefühlte 10000 zeilen weniger Code

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Lotto extends JFrame {

    public Lotto() {
        // Titel
        super("Lotto");
        // initialisiere die GUI
        init_gui();
    }

    public static void main(String[] args) {
        new Lotto();
    }

   

    private JButton start,reset, exit;
    private JPanel bPanel,fieldPanel,genPanel;
  

 
    private JTextField input[] = new JTextField[6];
    private JTextField genFields[] = new JTextField[6];







    private void init_gui() {
    JPanel fieldPanel = new JPanel();
    JPanel genPanel = new JPanel();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    fieldPanel.setLayout (new FlowLayout (FlowLayout.CENTER, 10, 10));
    genPanel.setLayout (new FlowLayout (FlowLayout.CENTER, 10, 10));  
        for (int i = 0;i<6;i++) {
        
        input[i] = new JTextField("");
        input[i].setPreferredSize( new Dimension(50,50) ) ;
       
        
        
       fieldPanel.add(input[i]); 
    }
    
    for (int j = 0;j<6;j++) {
        
        genFields[j] = new JTextField("");
        genFields[j].setPreferredSize( new Dimension(50,50) ) ;
       
        
        
       genPanel.add(genFields[j]); 
    }
    

        
    
        start = new JButton("Starten");
        start.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

            }
        });
        
        reset = new JButton("Neu");
        reset.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

            }
        });
        
       
        exit = new JButton("Exit");
        exit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

            }
        });
       
       
    
        bPanel = new JPanel();
       
        bPanel.add(start);
        bPanel.add(reset);
        bPanel.add(exit);

    
       
        getContentPane().add(bPanel, BorderLayout.SOUTH);
        getContentPane().add(fieldPanel, BorderLayout.NORTH);
        getContentPane().add(genPanel, BorderLayout.CENTER);
        pack();
        setVisible(true);
    }
}
```


----------



## Pazago (27. Mrz 2011)

Der Fehler ist immer noch nicht weg.... es kamen nur mehr dazu ;(;(;(


----------



## Pazago (27. Mrz 2011)

@dehlen ich mach mich direkt dran:rtfm: hoffentlich klappt es jetzt


----------



## hdi (27. Mrz 2011)

```
init_gui();
```
 -> 
	
	
	
	





```
initGui();
```

Ansonsten wird es glaub ich mal Zeit dem TO zu raten sich irgendeine Lernquelle ranzuschaffen. Er ist jetzt hier einmal quer durch die API und zurück gesprungen, mit total zusammenhangslosen Fragen und den einfachsten Fehlermeldungen, die er nicht versteht. Das bringt nix.. Also bitte Pazago: Kuck dir die Java-Insel an, oder die Videos aus meiner Signatur, oder sonst was - und wenn du die Basics verstehst, dann kannst du nochmal mit GUI kommen. Aber im Moment bitte nicht...


----------



## andiv (27. Mrz 2011)

Ich kann dir auch nur den Tipp geben erstmal die Finger von grafischen Oberflächen wegzulassen. Deine Kenntnisse scheinen dafür noch nicht auszureichen. Die Problemstellung ist wahrscheinlich auch ohne Oberfläche schon kompliziert genug für dich. Ich hab dir mal eine mögliche Lösung für ein Lotto-Programm erstellt:


```
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;


public class Lotto {
	
	public static void main(String[] args) {
		final int max = 49;
		final int n = 6;
		
		// Tipp einlesen
		int[] guess = getInput(n, max);
		
		// Lösung generieren
		int[] truth = generate(max);
		shuffle(truth);
		truth = choose(truth, n);
		
		// Anzahl Treffer ermitteln
		int matches = countMatches(guess, truth);
		
		// Ausgabe
		System.out.println("Tipp: " + Arrays.toString(sort(guess)));
		System.out.println("Lösung: " + Arrays.toString(sort(truth)));
		System.out.println("Treffer: " + matches);
	}
		
	
	private static int[] getInput(int n, int max) {
		if(n < 0 || max < n) {
			throw new IllegalArgumentException();
		}
		// gibt ein Array mit n unterschiedlichen Zahlen zwischen 1 und max zurück
		Scanner scanner = new Scanner(System.in);
		int[] input = new int[n];
		for(int i = 0; i < n; i++) {
			// Eingabe wiederholen bis gültige Zahl eingegeben wurde
			int value;
			do {
				System.out.print("Eingabe der " + (i + 1) + ". Zahl: ");
				value = scanner.nextInt();
				// mit find überprüfen ob Zahl schon einmal eingegeben wurde
			} while(value < 1 || max < value || find(input, value) != -1);
			input[i] = value;
		}
		return input;
	}

	
	private static int[] generate(int max) {
		if(max < 0) {
			throw new IllegalArgumentException();
		}
		// gibt ein Array mit den Zahlen von 1 bis max zurück
		int[] array = new int[max];
		for(int i = 0; i < array.length; i++) {
			array[i] = i + 1;
		}
		return array;
	}
	
	
	private static void shuffle(int[] array) {
		if(array == null) {
			throw new NullPointerException();
		}
		// mischt das übergebene Array indem jedes Element
		// mit einem zufälligen anderen vertauscht wird
		Random random = new Random();
		for(int i = 0; i < array.length; i++) {
			int j = random.nextInt(array.length);
			// tauschen
			int temp = array[i];
			array[i] = array[j];
			array[j] = temp;
		}
	}

	
	private static int[] choose(int[] array, int n) {
		if(array == null) {
			throw new NullPointerException();
		}
		if(n < 0 || array.length < n) {
			throw new IllegalArgumentException();
		}
		// gibt ein Array mit den ersten n Elementen des übergebenen Arrays zurück
		int[] choice = new int[n];
		for(int i = 0; i < n; i++) {
			choice[i] = array[i];
		}
		return choice;
	}
	

	private static int countMatches(int[] first, int[] second) {
		if(first == null || second == null) {
			throw new NullPointerException();
		}
		// zählt wieviele Zahlen aus first in second enthalten sind
		int matches = 0;
		for(int i = 0; i < first.length; i++) {
			if(find(second, first[i]) != -1) {
				matches++;
			}
		}
		return matches;
	}

	
	private static int[] sort(int[] array) {
		if(array == null) {
			throw new NullPointerException();
		}
		// sortiert das übergebene Array aufsteigend mit BubbleSort
		int n = array.length - 1;
		boolean swapped;
		do {
			swapped = false;
			for(int i = 0; i < n; i++) {
				if(array[i] > array[i + 1]) {
					int temp = array[i];
					array[i] = array[i + 1];
					array[i + 1] = temp;
					swapped = true;
				}
			}
			n--;
		} while(swapped);
		return array;
	}
	
	
	private static int find(int[] array, int value) {
		if(array == null) {
			throw new NullPointerException();
		}
		// gibt den Index von value in array zurück 
		// oder null falls value nicht enthalten ist
		for(int i = 0; i < array.length; i++) {
			if(array[i] == value) {
				return i;
			}
		}
		return -1;
	}

}
```

Statt shuffle könnte man Collections.shuffle und statt sort Arrays.sort oder Collections.sort verwenden, aber so siehst du wenigstens wie man Mischen und Sortieren implementieren kann.

Bei dieser Lösung ist sichergestellt, dass die Zahlen auch wirklich verschieden und nur aus dem Intervall von 1 bis 49 sind. Außerdem lässt es sich auch für andere Varianten als 6 aus 49 verwenden.


----------



## andiv (27. Mrz 2011)

```
if(a==b||a==c||a==d||a==e||a==f) {
    a++;
    }
    if(b==a||b==c||b==d||b==e||b==f) {
    b++;
    }
    if(c==b||c==a||c==d||c==e||c==f) {
    c++;
    }
    if(d==b||d==c||d==a||d==e||d==f) {
    d++;
    }
    if(e==b||e==c||e==d||e==a||e==f) {
    e++;
    }
    if(f==b||f==c||f==d||f==e||f==a) {
    f++;
    }
```

Das funktioniert nicht sobald z.B. drei Zahlen gleich sind (dann sind danach immer noch 2 gleich) oder 2 mal die 49 dabei ist (gibt dann eine 50).

Eine Lösung mit Sets wie auf der ersten Seite schon mal vorgeschlagen wurde ist denke ich am besten und kürzesten, aber mit Arrays ist es (wie gezeigt) auch machbar.


----------



## dehlen (27. Mrz 2011)

So hatte nicht besseres zu tun deswegen habe ich mal die Gui-Version fertiggestellt, ist nur für andere Leute die vielleicht mal hier im Forum nach einem Lotto Programm suchen, an den TO dir würde ich auch wie meine Vorredner empfehlen dir ein Buch oder einen Videokurs zur Hand zu nehmen und das ganze erst einmal halbwegs zu lernen.

Naja also jetzt hier meine fassung: (noch nicht enthalten ist, dass die eingegeben Werte nicht die gleichen seien dürfen, sonst ist hoffe ich alles implementiert =)


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;


public class Lotto extends JFrame {

    public Lotto() {
        // Titel
        super("Lotto");
        // initialisiere die GUI
        init_gui();
    }

    public static void main(String[] args) {
        new Lotto();
    }

   

    private JButton start,reset, exit;
    private JPanel bPanel,fieldPanel,genPanel;
  

 
    private JTextField input[] = new JTextField[6];
    private JTextField genFields[] = new JTextField[6];
    private int[]genKeys = new int[6];
    private int[]inputKeys = new int[6];
    int[] ziehung = new int[6];
 

   
    
    
    
    public void imBereich() {
        for (int i = 0; i<6;i++) {
            
    if(Integer.parseInt(input[i].getText()) < 1||Integer.parseInt(input[i].getText()) >49) {
                             JOptionPane.showMessageDialog(null, "Nur Zahlen von 0-49" ,"Nachricht", JOptionPane.OK_CANCEL_OPTION);
                             
                            }
                        }
        
        
    }
    
    
    
   public void ziehen(){
    
       
    
    Random r = new Random();
    for (int i = 0; i < 6; i++) {
        ziehung[i] = r.nextInt(49) + 1; // 1-49
        if(ziehung[i] == ziehung[i]) {
        ziehung[i]++;
        }
        genFields[i].setText(ziehung[i] + "");
    }
    }


    private void init_gui() {
    JPanel fieldPanel = new JPanel();
    JPanel genPanel = new JPanel();

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    fieldPanel.setLayout (new FlowLayout (FlowLayout.CENTER, 10, 10));
    genPanel.setLayout (new FlowLayout (FlowLayout.CENTER, 10, 10));  

        for (int i = 0;i<6;i++) {
        
        input[i] = new JTextField("");
        input[i].setPreferredSize( new Dimension(50,50) ) ;
        input[i].setDocument(new IntegerDocument());
        
        
       fieldPanel.add(input[i]); 
    }
    
    for (int j = 0;j<6;j++) {
        
        genFields[j] = new JTextField("");
        genFields[j].setPreferredSize( new Dimension(50,50) ) ;
        genFields[j].setDocument(new IntegerDocument());
        
        
       genPanel.add(genFields[j]); 
    }
    

        
    
        start = new JButton("Überprüfen");
        start.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                
                ziehen();
                imBereich();

                int richtige = 0; 
                
                
                
                for (int j = 0;j<6;j++) {
                    for (int i = 0;i<6;i++) {
                       
                  try {

                genKeys[j] = Integer.parseInt(genFields[j].getText());
                inputKeys[i] = Integer.parseInt(input[i].getText());
                 
            }
            catch (NumberFormatException nfe) {
                         JOptionPane.showMessageDialog(null, "Unerlaubte Zeichen!" ,"Nachricht", JOptionPane.OK_CANCEL_OPTION);
            }
            
   if(genKeys[j] == inputKeys[i]) {
                    richtige++;
                    
       } 
        
            }
        }
       
        
         JOptionPane.showMessageDialog(null, "Sie haben "+richtige+" Richtige" ,"Nachricht", JOptionPane.OK_CANCEL_OPTION);
    
        }

            
        });
        
        reset = new JButton("Neu");
        reset.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                for (int i = 0; i<6;i++) {
                    for(int j = 0;j<6;j++) {
                        
                        input[i].setText("");
                        genFields[j].setText("");
                    }
                }

            }
        });
        
       
        exit = new JButton("Exit");
        exit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);

            }
        });
       
       
    
        bPanel = new JPanel();
       
        bPanel.add(start);
        bPanel.add(reset);
        bPanel.add(exit);


        


        getContentPane().add(fieldPanel, BorderLayout.NORTH);
        getContentPane().add(genPanel, BorderLayout.CENTER);
        getContentPane().add(bPanel, BorderLayout.SOUTH);

        
        pack();
        setVisible(true);
    }
}
```

//Diese Klasse ist dazu da, dass man in den Textfeldern nur Zahlen eingeben kann

```
import javax.swing.text.*;

public class IntegerDocument extends PlainDocument
{
   @Override
   public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException
    {
      try{
             Integer.parseInt(s);
         }
         catch(Exception ex)
         {
            return ;
         }
      super.insertString(offset,s, attributeSet);
    }
}
```


----------



## Pazago (27. Mrz 2011)

Werd ich machen trotzdem vielen Dank für eure schnelle Hilfe :toll:


----------



## Julius_Mil (24. Jul 2012)

Huhu!

Sage mal, wird hier eigentlich auch des Thema *Euro-Jackpot* thematisiert, sprich spielt des hier jemand? Ich würde gerne mal gucken, wie des so geht, hätte aber vorher gerne 'nen Austausch mit Erfahrungen


----------



## Vann22 (28. Apr 2016)

Hallöchen,
ich spiele ausländisches Lotto. Die USA Powerball Zahlen lasse ich automatisch generieren. Ich hab schon zweimal das Geld im Lotto gewonnen


----------



## JStein52 (28. Apr 2016)

Wow, ich würde dich gerne heiraten


----------

