1. #1

    Registriert seit
    19.11.2011
    Beiträge
    2.128
    Thanked 1.936 Times in 1.180 Posts

    Standard Lottozahlen - Auswertung , Methode hängt

    Hallo.

    Ich habe ein Problem und zwar funktioniert die Lottozahlen - Auswertung meines Programmes nicht.

    Wenn ich ein Objekt der Lottoklasse erstelle , neue Zahlen generiere und dann die checkwin Methode aufrufe,
    bleibt das Programm dort irgendwie stecken.


    class Lotto
    {
    private int[] lottozahlen = new int[7];
    private int[] righttipped = new int[7];


    public int[] DoBubbleSort(int[] b)
    {
    boolean tau;

    do
    {
    tau = false;

    for (int i = 0; i < b.length - 1; i++)
    {

    if (b[i] > b[i + 1])
    {
    int t = b[i];
    b[i] = b[i + 1];
    b[i + 1] = t;
    tau = true;
    }

    }
    } while (tau);

    return b;
    }

    public String getZahlenString()
    {
    String c = "";
    for (int i = 0;i < lottozahlen.length ; i++)
    {
    c = c + Integer.toString(lottozahlen[i]);
    if(i < lottozahlen.length -1) c = c + " ;" ;
    }
    return c;
    }

    private boolean checkifexists(int a)
    {
    for(int i = 0; i < lottozahlen.length -1 ; i++)
    {
    if(lottozahlen[i] == a) return true;
    }
    return false;
    }


    private int getrandomdigit()
    {
    Random zufall = new Random();
    int z = zufall.nextInt(49);
    while(checkifexists(z) && z > 0){z = zufall.nextInt(49);}
    return z;
    }
    public int[] getnewdigits()
    {
    for(int i = 0; i < lottozahlen.length -1 ; i++) {lottozahlen[i] = getrandomdigit();}
    lottozahlen[6] = getrandomdigit();
    lottozahlen = DoBubbleSort(lottozahlen);
    return lottozahlen;
    }





    public int[] checkwin(int[] a)
    {
    int right = 0;
    int[] t = DoBubbleSort(a);

    for (int x = 0; x < 7; x++)
    {
    if (t[x] == lottozahlen[x])
    {
    right++;
    righttipped[x] = t[x];
    }
    else
    {
    righttipped[x] = -1;
    }

    }



    int[] tog = new int[right];
    for (int c = 0;c < right; c++)
    {
    if( !(righttipped[c] == -1)) tog[c] = righttipped[c];
    }

    return tog;
    }
    }



    Aufruf:


     public void Ziehung_ActionPerformed(ActionEvent evt) 
    {
    if (! (CurrentTip.getText().length() >= 7))
    {
    LottozahlenErgebnis.setText("Erst muss getippt werden!");
    return;
    }

    Lotto L = new Lotto();
    int[] d = L.getnewdigits();

    String gezogen = d[0] + " " + d[1] + " " + d[2] + " " + d[3] + " " + d[4] + " " + d[5] + " SZ: " + d[6];
    LottozahlenZiehung.setText(gezogen);

    int[] z = L.checkwin(gesetztezahlen);

    String rightt = z[0] + " " + z[1] + " " + z[2] + " " + z[3] + " " + z[4] + " " + z[5] + " SZ: " + z[6];
    LottozahlenErgebnis.setText("Richtige Zahlen: " + z.length);
    }



    Bei L.Checkwin(gesetztezahlen); geht es nicht weiter, weshalb im Label auch nicht "Richtige Zahlen: ... steht.

    Kann mir jemand etwas dazu sagen?

  2. #2
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.080
    Thanked 9.118 Times in 2.995 Posts
    Blog Entries
    5

    Standard AW: Lottozahlen - Auswertung , Methode hängt

    Debuggen, Breakpoints setzen und die Werte prüfen? Gegebenenfalls Anweisung für Anweisung.


  3. #3

    Registriert seit
    19.11.2011
    Beiträge
    2.128
    Thanked 1.936 Times in 1.180 Posts

    Standard AW: Lottozahlen - Auswertung , Methode hängt

    Das Problem ist, die Werte stimmen. Dennoch hängt die Methode irgendwo.

  4. #4
    Avatar von Nuebel
    Registriert seit
    23.11.2013
    Beiträge
    446
    Thanked 361 Times in 236 Posts

    Standard AW: Lottozahlen - Auswertung , Methode hängt

    Auf dem ersten Blick kann ich nichts Blockierendes feststellen.

    Aber mir ist etwas Unschönes aufgefallen; ich weiß nicht, ob dieses Verhalten explizit von dir gewollt ist. Arrays werden call-by-reference übergeben. Deine DoBubbleSort-Methode verändert die Eingabedaten. Diese Veränderungen gelten auch noch nach Verlassen der Methode. Zudem gibst du dieselbe Referenz zurück.
    Hast du vorher in C programmiert?

    Ein bisschen Sorgen macht mir folgendes Konstrukt:

    int[] tog = new int[right];
    for (int c = 0;c < right; c++)
    {
    if( !(righttipped[c] == -1)) tog[c] = righttipped[c];
    }


    Wenn ich mich beim Überfliegen nicht getäuscht habe, ist es Zufall wenn das Ergebnis dieses Ausschnittes das tut, was er eigentlich soll.
    Gehen wir einmal davon aus, dass man 3 Richtige getippt hat. Das Array tog hat also eine Länge von 3. Die Schleife zählt den Index von 0 bis 2 hoch. Das Array righttipped hat allerdings eine Länge von 7. Das bedeutet, dass die letzten 4 Elemente aus dem Array keiner Überprüfung unterzogen werden. Je nachdem welchen Index die richtig getippten Zahlen im righttipped-Array haben, kann es vorkommen, dass einige Elemente des tog-Arrays gar nicht initialisiert werden (außer die default 0 initialization).

    Aber da kann ich mich auch täuschen, ich habe es mir nicht genauer angesehen.

  5. The Following User Says Thank You to Nuebel For This Useful Post:


Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 10.03.2014, 16:36
  2. Paysafekarte Auscash Methode!
    Von Jack DanieLs im Forum Internet und Technik
    Antworten: 11
    Letzter Beitrag: 07.10.2012, 10:17
  3. Auswertung - GFX Battle #2
    Von Valorax im Forum Digitale Bild- und Videobearbeitung
    Antworten: 0
    Letzter Beitrag: 04.08.2012, 20:24
  4. [PS vs. Gimp] xTracZ vs. Comu - Auswertung
    Von xTracZ im Forum Showroom
    Antworten: 10
    Letzter Beitrag: 17.05.2012, 12:44
  5. Taskleiste hängt?
    Von Silent im Forum Windows
    Antworten: 2
    Letzter Beitrag: 16.04.2012, 15:42
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.