# Problem bei meinem Programm : Lottozahlen



## JeromeM90 (7. Apr 2009)

*Hallo liebe Gemeinde,

*
ich habe ein Problem mit meinem Programm (Lottozahlen).


Hier ist mein Java-Code:

[highlight=Java]package lottozahlen;

/*
 ********************************************************************************
 * Programmname: Lottozahlen                                                    *
 * Datum: 7.04.2009                                                                *
 * Erstellt von: Jerome                                                         *
 *                                                                                 *
 * Beschreibung:                                                                 *    
 *                                                                                 *
 * Es sollen 6 Zahlen eingegeben werden und 6 automatisch erzeugt werden.        *
 * Dieses Programm vergleicht die 6 Zahlen und gibt die Übereinstimmungen aus.    *
 ********************************************************************************
 */

import javax.swing.*;

public class Lottozahlen {

    int eingabe (String dialogtext){
    // Eingabe der 6 Tipps

        final int NUM_ZAHL = 6;
        final int ANZ_POTT = 49;

        int[] Tipp = new int [NUM_ZAHL];
        int[] Tipppott = new int [ANZ_POTT+1];

        int H;
        String sTipp = dialogtext;

        for (int i = 0; i <= ANZ_POTT; i++)
            Tipppott_ = 0;

        for (int i = 0; i <= NUM_ZAHL; i++){

            do{

                Tipp = Integer.parseInt(JOptionPane.showInputDialog("Ihre " +(i+1)+ ". Tippzahl lautet: "));

            } while (Tipp>49 || (Tipppott[Tipp]==1) || Tipp<1);

            Tipppott[Tipp] = 1;

        }

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if(Tipp < Tipp[j]){

                    H = Tipp;
                    Tipp = Tipp[j];
                    Tipp[j] = H;

                }

            }
        }

        for (int i = 0; i <= 5; i++)
            sTipp = sTipp + Tipp + ". ";

        int eingabe = Integer.parseInt(sTipp);
        return eingabe;

    }

    int lottozahlen (String dialogtext){
    // Lottozahlen werden generiert

        final int NUM_ZAHL = 6;
        final int ANZ_POTT = 49;

        int[] Lottozahlen = new int [NUM_ZAHL];
        int[] Lottopott = new int [ANZ_POTT+1];
        int H;

        String sLotto = dialogtext;

        for (int i = 0; i <= ANZ_POTT; i++)
            Lottopott = 0;

        for (int i = 0; i <= NUM_ZAHL; i++){

            do {

                Lottozahlen = (int)(Math.random()*ANZ_POTT)+1;

            } while (Lottopott[Lottozahlen] == 1);

            Lottopott[Lottozahlen] = 1;

        }    

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if(Lottozahlen < Lottozahlen[j]){

                    H = Lottozahlen;
                    Lottozahlen = Lottozahlen[j];
                    Lottozahlen[j] = H;

                }

            }
        }

        for (int i = 0; i < NUM_ZAHL; i++)
            sLotto = sLotto + Lottozahlen + ". ";

        int lottozahlen = Integer.parseInt(sLotto);
        return lottozahlen;    

    }

    int treffer (int eingabe, int lottozahlen){
    // Treffer werden gezaehlt    

        int trefferzaehler = 0;

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if (eingabe == lottozahlen)
                    trefferzaehler++;

            }
        }

        return trefferzaehler;

    }

    void ausgabe (int lottozahlen, int eingabe, int treffer){
    // Ausgabe von lottozahlen, eingabe & treffer    

        String gZahlen = Integer.toString(lottozahlen);
        String tipp = Integer.toString(eingabe);
        String trefferzaehler = Integer.toString(treffer);

        JOptionPane.showMessageDialog(null, gZahlen);
        JOptionPane.showMessageDialog(null, tipp);
        JOptionPane.showMessageDialog(null, trefferzaehler);

    }

    public static void main(String[] args) {
    // Methodenaufruf von eingabe, lottozahlen & treffer

        Lottozahlen meinLotto = new Lottozahlen();
        int eingabe = meinLotto.eingabe("Ihre Zahlen lauten : ");
        int lottozahlen = meinLotto.lottozahlen("Folgende Zahlen wurden gezogen : ");
        int treffer = meinLotto.treffer(eingabe, lottozahlen);
        meinLotto.ausgabe(lottozahlen, eingabe, treffer);

    }
}[/highlight]

Und hier ist folgende Fehlermeldung: 

[highlight=Java]Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
    at lottozahlen.Lottozahlen.eingabe(Lottozahlen.java:39)
    at lottozahlen.Lottozahlen.main(Lottozahlen.java:153)[/highlight]

Ich hoffe ihr könnt mir weiterhelfen.
Bitte verbessert meine Fehler (oder eher was ich ändern soll) und gibt mir keine anderen Codes.

*DANKE!*_


----------



## Der Müde Joe (7. Apr 2009)

final int NUM_ZAHL = 6;
...
int[] Tipp = new int [NUM_ZAHL];
...
 for (int i = 0; i <= NUM_ZAHL; i++){

ein Array der Länge 6 geht von 0 bis 5

EDIT:
Allgemein empfiehlt es sich, wenn man über Arrays iteriert, eine dynamische
Variable zu benutzen ( i < array.length). Denn so hat man immer
die Länge des Arrays (auch wenn sie hier fix ist, im Sinne von immer 6)
EDIT2:
soll nicht heissen, das ein Array eine dynamische Länge hat ;-)


----------



## JeromeM90 (7. Apr 2009)

Ah ok.

Aber mein Problem ist nur, wenn ich mein Programm ausführe, dann kommt ja "Ihre 1. Tippzahl lautet :" (usw.).
So und wenn er damit fertig ist wird das Programm abgebrochen.


----------



## Schandro (7. Apr 2009)

und wie immer die üblichen Hinweise:

Bei Variablennamen schreibt man den ersten Buchstaben klein
nach for, while, do, switch oder if-Statements immer {...} schreiben, niemals die Klammern weglassen nur weil nur eine einzige Anweisung folgt.


----------



## Der Müde Joe (7. Apr 2009)

>So und wenn er damit fertig ist wird das Programm abgebrochen. 

Ein unsafte Art des Abbruchs...
Naja..halt beim letzen Schleifendurchgang.. wenn i = 6 und i <= NUM_ZAH (6=6)
dann Tipp[6] ..peng

java.lang.ArrayIndexOutOfBoundsException: 6


----------



## JeromeM90 (7. Apr 2009)

Ok. Das werde ich mal machen. Danke schonmal. Ich habe es nur von meinem Lehrer gehört das man die {} bei einer Anweisung weglassen kann.


----------



## Der Müde Joe (7. Apr 2009)

>Lehrer gehört das man die {} bei einer Anweisung weglassen kann. 

und so was schimpft sich Lehrer...

Können ja, aber eine Fehlerquelle hoch 3....


----------



## JeromeM90 (7. Apr 2009)

lol ^^

*EDIT: *Der Fehler ist immernoch da. Ich habe jetzt die Variablennamen kleingeschrieben und ich habe die Klammern gesetzt.

Hier mein (aktualisierter) Code:

[highlight=Java]package lottozahlen;

/*
 ********************************************************************************
 * Programmname: Lottozahlen                                                    *
 * Datum: 7.04.2009                                                                *
 * Erstellt von: Jerome                                                         *
 *                                                                                 *
 * Beschreibung:                                                                 *    
 *                                                                                 *
 * Es sollen 6 Zahlen eingegeben werden und 6 automatisch erzeugt werden.        *
 * Dieses Programm vergleicht die 6 Zahlen und gibt die Übereinstimmungen aus.    *
 ********************************************************************************
 */

import javax.swing.*;

public class Lottozahlen {

    int eingabe (String dialogtext){
    // Eingabe der 6 Tipps

        final int num_zahl = 5;
        final int anz_pott = 49;

        int[] tipp = new int [num_zahl];
        int[] tipppott = new int [anz_pott+1];

        int H;
        String sTipp = dialogtext;

        for (int i = 0; i <= anz_pott; i++){

            tipppott_ = 0;

        }

        for (int i = 0; i <= num_zahl; i++){

            do{

                tipp = Integer.parseInt(JOptionPane.showInputDialog("Ihre " +(i+1)+ ". Tippzahl lautet: "));

            } while (tipp>49 || (tipppott[tipp]==1) || tipp<1);

            tipppott[tipp] = 1;

        }

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if(tipp < tipp[j]){

                    H = tipp;
                    tipp = tipp[j];
                    tipp[j] = H;

                }

            }
        }

        for (int i = 0; i <= 5; i++){

            sTipp = sTipp + tipp + ". ";

        }

        int eingabe = Integer.parseInt(sTipp);
        return eingabe;

    }

    int lottozahlen (String dialogtext){
    // Lottozahlen werden generiert

        final int num_zahl = 6;
        final int anz_pott = 49;

        int[] lottozahlen = new int [num_zahl];
        int[] lottopott = new int [anz_pott+1];
        int H;

        String sLotto = dialogtext;

        for (int i = 0; i <= anz_pott; i++){

            lottopott = 0;

        }

        for (int i = 0; i <= num_zahl; i++){

            do {

                lottozahlen = (int)(Math.random()*anz_pott)+1;

            } while (lottopott[lottozahlen] == 1);

            lottopott[lottozahlen] = 1;

        }    

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if(lottozahlen < lottozahlen[j]){

                    H = lottozahlen;
                    lottozahlen = lottozahlen[j];
                    lottozahlen[j] = H;

                }

            }
        }

        for (int i = 0; i < num_zahl; i++){

            sLotto = sLotto + lottozahlen + ". ";

        }

        int zahlen = Integer.parseInt(sLotto);
        return zahlen;    

    }

    int treffer (int eingabe, int lottozahlen){
    // Treffer werden gezaehlt    

        int trefferzaehler = 0;

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if (eingabe == lottozahlen)
                    trefferzaehler++;

            }
        }

        return trefferzaehler;

    }

    void ausgabe (int lottozahlen, int eingabe, int treffer){
    // Ausgabe von lottozahlen, eingabe & treffer    

        String gzahlen = Integer.toString(lottozahlen);
        String tipp = Integer.toString(eingabe);
        String trefferzaehler = Integer.toString(treffer);

        JOptionPane.showMessageDialog(null, gzahlen);
        JOptionPane.showMessageDialog(null, tipp);
        JOptionPane.showMessageDialog(null, trefferzaehler);

    }

    public static void main(String[] args) {
    // Methodenaufruf von eingabe, lottozahlen & treffer

        Lottozahlen meinLotto = new Lottozahlen();
        int eingabe = meinLotto.eingabe("Ihre Zahlen lauten : ");
        int lottozahlen = meinLotto.lottozahlen("Folgende Zahlen wurden gezogen : ");
        int treffer = meinLotto.treffer(eingabe, lottozahlen);
        meinLotto.ausgabe(lottozahlen, eingabe, treffer);

    }
}[/highlight]_


----------



## schalentier (8. Apr 2009)

Die Exception kommt daher:

```
final int num_zahl = 5;
..
int[] tipp = new int [num_zahl];
```

Du muesstest aber schreiben:

```
final int num_zahl = 5;
..
int[] tipp = new int [num_zahl+1];
```

Generell is das aber irgendwie... unueblich. So macht man das ueblicherweise (hoffentlich hab ich nix verpeilt):

```
int numberOfTips = 6;
int[] tipp = new int [numberOfTips];

for( int i=0; i<numberOfTips; i++ ) {
   int currentTip;
   do{
      currentTip = Integer.parseInt(JOptionPane.showInputDialog("Ihre " +(i+1)+ ". Tippzahl lautet: "));
   } while (currentTip>49 || (tipppott[currentTip]==1) || currentTip<1);
   tipppott[currentTip] = 1;
}
```


----------



## Der Müde Joe (8. Apr 2009)

und wenn wir schon dabei sind:
int[] lottozahlen = new int [num_zahl];
...
for (int i = 0; i <= num_zahl; i++){
lottozahlen_ =..

zb mit 3 (länge des Arrays)
i=0 ... 0 <= 3 lottozahlen[0] ...ok
i=1 ... 1 <= 3 lottozahlen[1] ...ok
i=2 ... 2 <= 3 lottozahlen[2] ...ok
i=3 ... 3 <= 3 lottozahlen[3] ...ArrayIndexOutOfBoundsException: 3

>So macht man das ueblicherweise

array.length,  nicht eine Zahl...auch wenn sie die Länge des Arrays bestimmt_


----------



## Matt (8. Apr 2009)

voll die hardcore antworten ^^ dabei springt er doch einfach über das array hinaus...
was die klammern angeht lass ich die auch hinund wieder weg - funktionieren tut es in 99,9% aller fälle xD

einfach erklärung für den herrn

in der Zeile 35 ist eine For-Schleife, welche das das Array durchlaufen tut - und diese For-schleife läuft soweit das sie über das array hinaus hüpft ^^

Einfach aus:

[highlight=Java] for (int i = 0; i <= NUM_ZAHL; i++){...}[/highlight]

das machen

[highlight=Java] for (int i = 0; i < NUM_ZAHL; i++){...}[/highlight]

(das <= wurde in ein < verwandelt :shock

Oo wenn es da nochmehr fehler gibt kA hab nur den nun gesucht xD


----------



## JeromeM90 (8. Apr 2009)

Ich habe jetzt alle eure Probleme (außer array.lenght) ausprobiert und es kommen jetzt nochmehr Fehler xD

[highlight=Java]package lottozahlen;

/*
 ********************************************************************************
 * Programmname: Lottozahlen                                                    *
 * Datum: 7.04.2009                                                                *
 * Erstellt von: Jerome                                                         *
 *                                                                                 *
 * Beschreibung:                                                                 *    
 *                                                                                 *
 * Es sollen 6 Zahlen eingegeben werden und 6 automatisch erzeugt werden.        *
 * Dieses Programm vergleicht die 6 Zahlen und gibt die Übereinstimmungen aus.    *
 ********************************************************************************
 */

import javax.swing.*;

public class Lottozahlen {

    int eingabe (String dialogtext){
    // Eingabe der 6 Tipps

        final int num_zahl = 5;
        final int anz_pott = 49;

        int[] tipp = new int [num_zahl+1];
        int[] tipppott = new int [anz_pott+1];

        int H;
        String sTipp = dialogtext;

        for (int i = 0; i <= anz_pott; i++){

            tipppott_ = 0;

        }

        for (int i = 0; i < num_zahl; i++){

            do{

                tipp = Integer.parseInt(JOptionPane.showInputDialog("Ihre " +(i+1)+ ". Tippzahl lautet: "));

            } while (tipp>49 || (tipppott[tipp]==1) || tipp<1);

            tipppott[tipp] = 1;

        }

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if(tipp < tipp[j]){

                    H = tipp;
                    tipp = tipp[j];
                    tipp[j] = H;

                }

            }
        }

        for (int i = 0; i <= 5; i++){

            sTipp = sTipp + tipp + ". ";

        }

        int eingabe = Integer.parseInt(sTipp);
        return eingabe;

    }

    int lottozahlen (String dialogtext){
    // Lottozahlen werden generiert

        final int num_zahl = 5;
        final int anz_pott = 49;

        int[] lottozahlen = new int [num_zahl+1];
        int[] lottopott = new int [anz_pott+1];
        int H;

        String sLotto = dialogtext;

        for (int i = 0; i <= anz_pott; i++){

            lottopott = 0;

        }

        for (int i = 0; i <= num_zahl; i++){

            do {

                lottozahlen = (int)(Math.random()*anz_pott)+1;

            } while (lottopott[lottozahlen] == 1);

            lottopott[lottozahlen] = 1;

        }    

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if(lottozahlen < lottozahlen[j]){

                    H = lottozahlen;
                    lottozahlen = lottozahlen[j];
                    lottozahlen[j] = H;

                }

            }
        }

        for (int i = 0; i < num_zahl; i++){

            sLotto = sLotto + lottozahlen + ". ";

        }

        int zahlen = Integer.parseInt(sLotto);
        return zahlen;    

    }

    int treffer (int eingabe, int lottozahlen){
    // Treffer werden gezaehlt    

        int trefferzaehler = 0;

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if (eingabe == lottozahlen)
                    trefferzaehler++;

            }
        }

        return trefferzaehler;

    }

    void ausgabe (int lottozahlen, int eingabe, int treffer){
    // Ausgabe von lottozahlen, eingabe & treffer    

        String gzahlen = Integer.toString(lottozahlen);
        String tipp = Integer.toString(eingabe);
        String trefferzaehler = Integer.toString(treffer);

        JOptionPane.showMessageDialog(null, gzahlen);
        JOptionPane.showMessageDialog(null, tipp);
        JOptionPane.showMessageDialog(null, trefferzaehler);

    }

    public static void main(String[] args) {
    // Methodenaufruf von eingabe, lottozahlen & treffer

        Lottozahlen meinLotto = new Lottozahlen();
        int eingabe = meinLotto.eingabe("Ihre Zahlen lauten : ");
        int lottozahlen = meinLotto.lottozahlen("Folgende Zahlen wurden gezogen : ");
        int treffer = meinLotto.treffer(eingabe, lottozahlen);
        meinLotto.ausgabe(lottozahlen, eingabe, treffer);

    }
}[/highlight]

Und hier meine Fehler bei Eclipse:

[highlight=Java]Exception in thread "main" java.lang.NumberFormatException: For input string: "Ihre Zahlen lauten : 1. 2. 3. 4. 5. 6. "
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at lottozahlen.Lottozahlen.eingabe(Lottozahlen.java:70)
    at lottozahlen.Lottozahlen.main(Lottozahlen.java:165)
[/highlight]_


----------



## Matt (8. Apr 2009)

Also Oo damit wir mal verstehen was du da gemacht hast xD

Das ist dein Aufruf:
[highlight=Java]  int eingabe = meinLotto.eingabe("Ihre Zahlen lauten : ");
[/highlight]

Der aufruf der methode schaut so aus:
[highlight="Java"]int eingabe (String dialogtext)[/highlight]

An dieser Stelle übernimmst du den Parameter in einer Variable:
[highlight="Java"] String sTipp = dialogtext;
[/highlight]

Wir sehen es steht schon was drin xD und zwar "Ihre Zahlen lauten : "...

Unten hängst du dem string noch was an:
[highlight="Java"] for (int i = 0; i <= 5; i++){

            sTipp = sTipp + tipp_ + ". ";

        }
[/highlight]

Bis hierhin sollte alles passen Oo

dann kommt das:
[highlight="Java"]        
int eingabe = Integer.parseInt(sTipp);
        return eingabe;
[/highlight]

du machst aus deinem ganzen String ein Int und gibst ihn zurück - ich denke hier liegt das problem Oo vllt solltest du direkt die int-arrays zurückgeben bzw. weiter geben Oo und der ausgabe die extras überlassen

so könnte das aussehen:

[highlight=Java]package lottozahlen;

/*
 ********************************************************************************
 * Programmname: Lottozahlen                                                    *
 * Datum: 7.04.2009                                                                *
 * Erstellt von: Jerome                                                         *
 *                                                                                 *
 * Beschreibung:                                                                 *    
 *                                                                                 *
 * Es sollen 6 Zahlen eingegeben werden und 6 automatisch erzeugt werden.        *
 * Dieses Programm vergleicht die 6 Zahlen und gibt die Übereinstimmungen aus.    *
 ********************************************************************************
 */

import javax.swing.*;

public class Lottozahlen {

    int[] eingabe (){
    // Eingabe der 6 Tipps

        final int num_zahl = 5;
        final int anz_pott = 49;

        int[] tipp = new int [num_zahl+1];
        int[] tipppott = new int [anz_pott+1];

        int H;

        for (int i = 0; i <= anz_pott; i++){

            tipppott = 0;

        }

        for (int i = 0; i < num_zahl; i++){

            do{

                tipp = Integer.parseInt(JOptionPane.showInputDialog("Ihre " +(i+1)+ ". Tippzahl lautet: "));

            } while (tipp>49 || (tipppott[tipp]==1) || tipp<1);

            tipppott[tipp] = 1;

        }

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if(tipp < tipp[j]){

                    H = tipp;
                    tipp = tipp[j];
                    tipp[j] = H;

                }

            }
        }


        return tipp;

    }

    int[] lottozahlen (){
    // Lottozahlen werden generiert

        final int num_zahl = 5;
        final int anz_pott = 49;

        int[] lottozahlen = new int [num_zahl+1];
        int[] lottopott = new int [anz_pott+1];
        int H;


        for (int i = 0; i <= anz_pott; i++){

            lottopott = 0;

        }

        for (int i = 0; i <= num_zahl; i++){

            do {

                lottozahlen = (int)(Math.random()*anz_pott)+1;

            } while (lottopott[lottozahlen] == 1);

            lottopott[lottozahlen] = 1;

        }    

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if(lottozahlen < lottozahlen[j]){

                    H = lottozahlen;
                    lottozahlen = lottozahlen[j];
                    lottozahlen[j] = H;

                }

            }
        }



        return lottozahlen;    

    }

    int treffer (int[] eingabe, int[] lottozahlen){
    // Treffer werden gezaehlt    

        int trefferzaehler = 0;

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if (eingabe == lottozahlen[j])
                    trefferzaehler++;

            }
        }

        return trefferzaehler;

    }

    void ausgabe (int[] lottozahlen, int[] eingabe, int treffer){
    // Ausgabe von lottozahlen, eingabe & treffer    


        JOptionPane.showMessageDialog(null, "Lottozahlen: "+lottozahlen);
        JOptionPane.showMessageDialog(null, "Tipps: "+eingabe);
        JOptionPane.showMessageDialog(null, ""+trefferzaehler);

    }

    public static void main(String[] args) {
    // Methodenaufruf von eingabe, lottozahlen & treffer

        Lottozahlen meinLotto = new Lottozahlen();
        int[] eingabe = meinLotto.eingabe();
        int[] lottozahlen = meinLotto.lottozahlen();
        int treffer = meinLotto.treffer(eingabe, lottozahlen);
        meinLotto.ausgabe(lottozahlen, eingabe, treffer);

    }
}[/highlight]

kA ob alles genau passt - hab leider vorlesung  und musste schnell gehen_


----------



## JeromeM90 (8. Apr 2009)

So ich habe mein Programm zum laufen bekommen.
Ich kann jetzt 6 Zahlen eingeben und 6 Zahlen generieren lassen.

Mein Problem ist jetzt nur noch der trefferzaehler.
Ich habe meine Lottozahlen erstmal von 1 -10 gesetzt.

Ich habe mein trefferzaehler eigendlich als Integer.
Aber ich muss mein trefferzaehler doch zum String machen, 
da ich meine Methodenaufrufe alle (außer ausgabe) in String habe 
und es nicht erlaubt ist dies zu tun:

meinLotto.ausgabe(eingabe, lottozahlen, treffer);
// Dies ist nicht erlaubt (String, String, int)!

Hier mein bisheriger Quellcode:

[highlight=Java]package lottozahlen;

/*
 ********************************************************************************
 * Programmname: Lottozahlen                                                    *
 * Datum: 7.04.2009                                                                *
 * Erstellt von: Jerome                                                         *
 *                                                                                 *
 * Beschreibung:                                                                 *    
 *                                                                                 *
 * Es sollen 6 Zahlen eingegeben werden und 6 automatisch erzeugt werden.        *
 * Dieses Programm vergleicht die 6 Zahlen und gibt die Übereinstimmungen aus.    *
 ********************************************************************************
 */

import javax.swing.*;

public class Lottozahlen {

    String eingabe (String dialogtext){
    // Eingabe der 6 Tipps

        final int num_zahl = 6;
        final int anz_pott = 10;

        int[] tipp = new int [num_zahl];
        int[] tipppott = new int [anz_pott+1];

        int H;
        String sTipp = dialogtext;

        for (int i = 0; i <= anz_pott; i++){

            tipppott_ = 0;

        }

        for (int i = 0; i < num_zahl; i++){

            do{

                tipp = Integer.parseInt(JOptionPane.showInputDialog("Ihre " +(i+1)+ ". Tippzahl lautet: "));

            } while (tipp>49 || (tipppott[tipp]==1) || tipp<1);

            tipppott[tipp] = 1;

        }

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if(tipp < tipp[j]){

                    H = tipp;
                    tipp = tipp[j];
                    tipp[j] = H;

                }

            }
        }

        for (int i = 0; i <= 5; i++){

            sTipp = sTipp + tipp + ", ";

        }

        return sTipp;

    }

    String lottozahlen (String dialogtext){
    // Lottozahlen werden generiert

        final int num_zahl = 5;
        final int anz_pott = 10;

        int[] lottozahlen = new int [num_zahl+1];
        int[] lottopott = new int [anz_pott+1];
        int H;

        String sLotto = dialogtext;

        for (int i = 0; i <= anz_pott; i++){

            lottopott = 0;

        }

        for (int i = 0; i <= num_zahl; i++){

            do {

                lottozahlen = (int)(Math.random()*anz_pott)+1;

            } while (lottopott[lottozahlen] == 1);

            lottopott[lottozahlen] = 1;

        }    

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if(lottozahlen < lottozahlen[j]){

                    H = lottozahlen;
                    lottozahlen = lottozahlen[j];
                    lottozahlen[j] = H;

                }

            }
        }

        for (int i = 0; i < num_zahl; i++){

            sLotto = sLotto + lottozahlen + ", ";

        }

        return sLotto;    

    }

    String treffer (String eingabe, String lottozahlen){
    // Treffer werden gezaehlt    

        int trefferzaehler = 0;

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if (eingabe == lottozahlen){

                    trefferzaehler++;

                }

            }
        }

        String treffer = Integer.toString(trefferzaehler);
        return treffer;

    }

    void ausgabe (String lottozahlen, String eingabe, String treffer){
    // Ausgabe von lottozahlen, eingabe & treffer    

        JOptionPane.showMessageDialog(null, lottozahlen);
        JOptionPane.showMessageDialog(null, eingabe);
        JOptionPane.showMessageDialog(null, "Sie haben " +treffer+ " Übereinstimmungen!");

    }

    public static void main(String[] args) {
    // Methodenaufruf von eingabe, lottozahlen & treffer

        Lottozahlen meinLotto = new Lottozahlen();
        String eingabe = meinLotto.eingabe("Sie haben folgende Zahlen gewählt: ");
        String lottozahlen = meinLotto.lottozahlen("Es wurden folgende Zahlen gezogen: ");
        String treffer = meinLotto.treffer(eingabe, lottozahlen);
        meinLotto.ausgabe(lottozahlen, eingabe, treffer);

    }
}[/highlight]

Wenn ich also treffer als String habe zeigt er mir immer an "Sie haben 0 Übereinstimmungen!".

*EDIT: Ich müsste theoretisch bei mein String treffer das if-Statement ändern auf: 

if (tipp == lottozahlen[j]) <- aber wie gebe ich die Parameter hierher ?
*_


----------



## Matt (8. Apr 2009)

Also ich erklär des nochmal xD du gibst Strings zurück wo popo drin steht. Und popo besteht aus irgendwas braunen und einpaar zahlen....und dieses braune und zahlen versuchst du in strings zuverwandeln und zu vergleichen ^^ das erzeugt noch viel mehr braunes ^^

ich hab ne verbesserung hinzugefügt xD und diese sollte doch passen? oder etwa nicht? Dabei werden nicht mehr strings hin und her geschoben xD sondern nur integer-arrays und integer xD


----------



## JeromeM90 (8. Apr 2009)

Du hast aber gesagt, dass ich den String nicht zum Integerwert machen soll. 
Kannst Du mir nicht für diesen Teil einen funktionsfähigen Code vorstellen bitte ?

Dieser String treffer muss geändert werden (aber wie ?):

 [highlight=Java]String treffer (String eingabe, String lottozahlen){
    // Treffer werden gezaehlt    

        int trefferzaehler = 0;

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if (eingabe == lottozahlen){

                    trefferzaehler++;

                }

            }
        }

        String treffer = Integer.toString(trefferzaehler);
        return treffer;

    }[/highlight]

Es geht um die Zeile 9, da er dies nicht vergleichen kann und immer 0 sagt .


----------



## max40 (8. Apr 2009)

String vergleicht man mit equals. Also  if (eingabe.equals(lottozahlen)){ ...

Aber du solltest dir mal durchlesen was Matt-Softwareschmiede schreibt! Dann würdest du auch nicht versuchen 2 Strings miteinander zu vergleichen!


----------



## JeromeM90 (8. Apr 2009)

Das ist eine gleiche Variante wie if (eingabe == lottozahlen)  und es kommt immmernoch 0 dabei raus.


----------



## max40 (8. Apr 2009)

JeromeM90 hat gesagt.:


> Das ist eine gleiche Variante wie if (eingabe == lottozahlen)  und es kommt immmernoch 0 dabei raus.



Definitiv ist es nicht die gleiche Variante! Denn == prüft auf gleiche Referenz nicht auf gleichen Inhalt!

Aber was ich im letzten Beitrag noch geändert habe:
Du solltest das lesen was Matt-Softwareschmiede so schreibt, evtl. hilft das weiter und würdest nicht auf String vergleichen!

Den deine for-schleife gibt dir immer 0 oder 36 zurück und nix anderes. Bestimmt nicht das was du willst!


----------



## Civilazi (8. Apr 2009)

Nein, das ist nicht das Gleiche. == vergleicht Referenzen, equals() kannst du überschreiben, dann tut es was immer du willst. Im Allgemeinen prüft es auf gleichen Inhalt.

€: Zu lahm... na ja


----------



## JeromeM90 (8. Apr 2009)

Ah supi.
Denn habe ich was Neues gelernt.
Ich komme mit der Aussage von Matt... nicht klar.

Vielleicht kann er mir ja bitte ein Beispiel meines Programmes geben .


----------



## max40 (8. Apr 2009)

[HIGHLIGHT="Java"]    int treffer (int[] eingabe, int[] lottozahlen){
    // Treffer werden gezaehlt    

        int trefferzaehler = 0;

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if (eingabe_ == lottozahlen[j])
                    trefferzaehler++;

            }
        }

        return trefferzaehler;

    }[/HIGHLIGHT]


Statt irgendwelche String zu vergleichen, packt er die Zahlen in ein int[] und vergleicht deren Inhalte!_


----------



## Matt (8. Apr 2009)

^^ jaja nehmen wir mal deine funktion

[highlight="Java"]String treffer (String eingabe, String lottozahlen){
    // Treffer werden gezaehlt    

        int trefferzaehler = 0;

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if (eingabe == lottozahlen){

                    trefferzaehler++;

                }

            }
        }

        String treffer = Integer.toString(trefferzaehler);
        return treffer;

    }[/highlight]

So und nun nehmen wir meinen verbesserungsvorschlag  welcher zwischen Zeile 117 und 133 steht 
[highlight="Java"]
int treffer (int[] eingabe, int[] lottozahlen){
    // Treffer werden gezaehlt    

        int trefferzaehler = 0;

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if (eingabe_ == lottozahlen[j])
                    trefferzaehler++;

            }
        }

        return trefferzaehler;

    }[/highlight]

Nun bitte den unterschied suchen _


----------



## Leroy42 (8. Apr 2009)

Der Müde Joe hat gesagt.:


> >Lehrer gehört das man die {} bei einer Anweisung weglassen kann.
> 
> und so was schimpft sich Lehrer...



Wieso? Er hat doch Recht! Obwohl man es _vielleicht_ nicht machen
sollte. Ich zumindest bastele *keinen* Block um eine
Nicht-Verbund-Anweisung


----------



## Schandro (8. Apr 2009)

> Braces are used around all statements, even single statements, when they are part of a control structure, such as a if-else or for statement. This makes it easier to add statements without accidentally introducing bugs due to forgetting to add braces.


Aus der Java Coding Convention. Es kann aber natürlich jeder machen wie er will.


----------



## JeromeM90 (8. Apr 2009)

Ok.
Das werde ich später dann ausprobieren.
Ich muss erstmal weg und vielen Dank für dein Beispiel.
Ich habe es kappiert.


----------



## JeromeM90 (8. Apr 2009)

So ich habe das geändert.
Nun bleibt noch der Methodenaufruf offen.

Fehler: String treffer = meinLotto.treffer(eingabe, lottozahlen); 
// The method treffer(int[], int[]) in the type Lottozahlen is not applicable for the arguments (String, String)

Matt-Softwareschmiede, könntest Du bitte mein komplettes Programm überarbeiten, 
sodass der trefferzaehler funktioniert und das Programm geht ?

*VIELEN DANK SCHONMAL!*


----------



## MiDniGG (8. Apr 2009)

JeromeM90 hat gesagt.:


> So ich habe das geändert.
> Nun bleibt noch der Methodenaufruf offen.
> 
> Fehler: String treffer = meinLotto.treffer(eingabe, lottozahlen);
> ...



Der Fehler sagt Dir, dass Du versuchst ein int-Array zu übergeben, obwohl Strings erwartet werden.
Ich hab mir Dein Prog jetzt nicht angeschaut. Aber entweder musst Du eben Strings anstatt der int-Arrays an die Methode treffer übergeben oder die Methode treffer selbst umschreiben, sodass sie int-Arrays erwartet
[HIGHLIGHT="Java"]public void treffer(int[] arr1, int[] arr2) {...}[/HIGHLIGHT]
Jedoch wirst Du hierbei noch ziemlich viel in der Methode treffer selbst umschreiben müssen...


----------



## JeromeM90 (8. Apr 2009)

hm... ok ich probiere einfach ein bissel rum ^^


----------



## Matt (9. Apr 2009)

und nochmal 

Dein Code:
[highlight="Java"] public static void main(String[] args) {
    // Methodenaufruf von eingabe, lottozahlen & treffer

        Lottozahlen meinLotto = new Lottozahlen();
        String eingabe = meinLotto.eingabe("Sie haben folgende Zahlen gewählt: ");
        String lottozahlen = meinLotto.lottozahlen("Es wurden folgende Zahlen gezogen: ");
        String treffer = meinLotto.treffer(eingabe, lottozahlen);
        meinLotto.ausgabe(lottozahlen, eingabe, treffer);

    }
[/highlight]
Mein Code:

[highlight="Java"]public static void main(String[] args) {
    // Methodenaufruf von eingabe, lottozahlen & treffer

        Lottozahlen meinLotto = new Lottozahlen();
        int[] eingabe = meinLotto.eingabe();
        int[] lottozahlen = meinLotto.lottozahlen();
        int treffer = meinLotto.treffer(eingabe, lottozahlen);
        meinLotto.ausgabe(lottozahlen, eingabe, treffer);

    }
[/highlight]


Das geile an der sache ist Oo das steht alles auf Seite 1 von diesem Topic/Thread....es sind alle funktionen deiner klasse nur umgeschrieben so das es passt ^^ ein Copy und Paste hätte gereicht und du wärst schon vor stunden fertig gewesen....


Matt


----------



## JeromeM90 (9. Apr 2009)

Oh Danke Dir und sorry das ich mich so anstelle, aber ich bin noch Anfänger und verstehe noch nicht alles.
Aber dafür wird ja hier geholfen und mir hilft das weiter.

EDIT: LoL jetzt gibt er mir nur Müll aus. Aber Übereinstimmungen gehen.

[highlight=Java]package lottozahlen;

/*
 ********************************************************************************
 * Programmname: Lottozahlen                                                    *
 * Datum: 7.04.2009                                                                *
 * Erstellt von: Jerome                                                         *
 *                                                                                 *
 * Beschreibung:                                                                 *    
 *                                                                                 *
 * Es sollen 6 Zahlen eingegeben werden und 6 automatisch erzeugt werden.        *
 * Dieses Programm vergleicht die 6 Zahlen und gibt die Übereinstimmungen aus.    *
 ********************************************************************************
 */

import javax.swing.*;

public class Lottozahlen {

    int[] tipp (){
    // Eingabe der 6 Tipps

        final int num_zahl = 5;
        final int anz_pott = 10;

        int[] tipp = new int [num_zahl+1];
        int[] tipppott = new int [anz_pott+1];

        int H;

        for (int i = 0; i <= anz_pott; i++){

            tipppott_ = 0;

        }

        for (int i = 0; i < num_zahl; i++){

            do{

                tipp = Integer.parseInt(JOptionPane.showInputDialog("Ihre " +(i+1)+ ". Tippzahl lautet: "));

            } while (tipp>49 || (tipppott[tipp]==1) || tipp<1);

            tipppott[tipp] = 1;

        }

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if(tipp < tipp[j]){

                    H = tipp;
                    tipp = tipp[j];
                    tipp[j] = H;

                }

            }
        }

        return tipp;

    }

    int[] lottozahlen (){
    // Lottozahlen werden generiert

        final int num_zahl = 5;
        final int anz_pott = 10;

        int[] lottozahlen = new int [num_zahl+1];
        int[] lottopott = new int [anz_pott+1];

        int H;

        for (int i = 0; i <= anz_pott; i++){

            lottopott = 0;

        }

        for (int i = 0; i <= num_zahl; i++){

            do {

                lottozahlen = (int)(Math.random()*anz_pott)+1;

            } while (lottopott[lottozahlen] == 1);

            lottopott[lottozahlen] = 1;

        }    

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if(lottozahlen < lottozahlen[j]){

                    H = lottozahlen;
                    lottozahlen = lottozahlen[j];
                    lottozahlen[j] = H;

                }

            }
        }

        return lottozahlen;    

    }

    int treffer (int[] tipp, int[] lottozahlen){
    // Treffer werden gezaehlt    

        int trefferzaehler = 0;

        for (int i = 0; i <= 5; i++){
            for (int j = 0; j <= 5; j++){

                if (tipp == lottozahlen[j]){

                    trefferzaehler++;

                }

            }
        }

        return trefferzaehler;

    }

    void ausgabe (int[] tipp, int[] lottozahlen, int treffer){
    // Ausgabe von lottozahlen, eingabe & treffer    

        JOptionPane.showMessageDialog(null, "Ihre Tippzahlen lauten: " +tipp);
        JOptionPane.showMessageDialog(null, "Es wurden folgende Lottozahlen ermittelt: " +lottozahlen);
        JOptionPane.showMessageDialog(null, "Sie haben " +treffer+ " Übereinstimmungen!");

    }

    public static void main(String[] args) {
    // Methodenaufruf von eingabe, lottozahlen & treffer

        Lottozahlen meinLotto = new Lottozahlen();
        int[] tipp = meinLotto.tipp();
        int[] lottozahlen = meinLotto.lottozahlen();
        int treffer = meinLotto.treffer(tipp, lottozahlen);
        meinLotto.ausgabe(lottozahlen, tipp, treffer);

    }
}[/highlight]_


----------

