blöde switchs...

  • Moin.einer meiner switchs ärgert mich mal wieder und ich hab langsam die schnauze voll oO theoretisch sieht es so aus: ein fenster wird geöffnet(bool1==true).danach hat man 4 Tasten zu auswahl: pfeil hoch(bewegt den pfeil auf dem bildschirm zum nächsten wort darüber), pfeil runter(dasselbe, nur eben umgedreht), enter(geht in einen anderen switch der je nachdem auf welches wort der pfeil zeigt eine aktion ausführt) und escape(verlässt das fenster). das ganze findet in der keyPressed(KeyEvent event)-methode statt.
    und so sieht der code aus:


    pfeil hoch und runter und escape funktioniern wunderbar, pfeil bewegt sich, selected läuft mit.problem ist der "innere" switch.da funktioniert nur case 1 problemlos. case 2,3,4 machen nichts(fenster sollte sich schließen, bleibt aber offen).zudem wird selected wieder auf 1 zurückgesetzt - was mir völlig schleierhaft ist wie das funktioniert, schließlich hab ich NIRGENS "selected = 1" zu stehn und selbst wenn das programm nach dem inneren switch in den äußeren geht(was er nicht tut) und case 38 ausführt kann bei "selected--" selected von 4 nicht auf 1 springen...
    und ja ich weiß, mit nem mousemotionlistener und buttons etcpp. wär das alles viel einfacher und so aber ich möchte das so haben X(
    plz help xD

  • Die zusätzliche Blockung der case Teile ist überflüssig. (Die geschweiften Klammern)

    Ich würde mich aber fragen, was der wert hinter der Variabel selected zum ausgangszustand ist, da sie ja anscheinend nie korrekt gesetzt wird, sonst würdest du ja nicht auf den Wert 1 immer wieder landen.

    Sämtlicher Code erhebt keinen Anspruch auf syntaktische Korrektheit geschweige denn Ausführbarkeit und ist für die Implementation außerhalb der Beispiele nicht geeignet.
    [Blockierte Grafik: http://www.snippr.de/social/img/logo.png]
    Kein Support für kommerzielle Scripts | Kein kostenloser Support via ICQ

  • Die zusätzliche Blockung der case Teile ist überflüssig. (Die geschweiften Klammern)


    weiß ich, machts aber übersichtlicher (für mich Oo)


    Ich würde mich aber fragen, was der wert hinter der Variabel selected zum ausgangszustand ist, da sie ja anscheinend nie korrekt gesetzt wird, sonst würdest du ja nicht auf den Wert 1 immer wieder landen.


    am anfang ist selected 1.wird gaaaaanz oben wo alle variablen gesetzt werden sofort zugeteilt, wird auch gleich am anfang gebraucht.
    selected läuft ja korrekt mit (habs mit System.out.println(selected+"") überprüft).nur wenn ich dann enter drücke springts wieder auf 1 ohne das was anderes passiert(es sei denn sie ist schon auf 1, dann macht er case 1)

  • Die { } sorgen ja für einen eigenen Gültigkeitsbereich, es kann also sinnvoll sein, wenn Variablen im case deklariert werden.
    Den switch solltest du aber so machen:

    Code
    switch(selected)
    {
        case 1:
              bool2 = true;          // irrelevant
              bool1 = false;         // fenster schließt sich
              break;
        default:
              bool1 = false;
    }


    Du solltest dir jedoch ein paar Gedanken machen:
    Was ist bool1, wenn default erreicht wird?
    Warum verwendest du Konstanten wie 10 oder 38, es gibt doch sicherlich Namen für diese Zahlen?

    Viele liebe Grüße
    The User

  • am anfang ist selected 1.wird gaaaaanz oben wo alle variablen gesetzt werden sofort zugeteilt, wird auch gleich am anfang gebraucht.
    selected läuft ja korrekt mit (habs mit System.out.println(selected+"") überprüft).nur wenn ich dann enter drücke springts wieder auf 1 ohne das was anderes passiert(es sei denn sie ist schon auf 1, dann macht er case 1)

    Bitte Poste einmal den gesamten Code , der dafür relvant ist.

    Sämtlicher Code erhebt keinen Anspruch auf syntaktische Korrektheit geschweige denn Ausführbarkeit und ist für die Implementation außerhalb der Beispiele nicht geeignet.
    [Blockierte Grafik: http://www.snippr.de/social/img/logo.png]
    Kein Support für kommerzielle Scripts | Kein kostenloser Support via ICQ

  • Die { } sorgen ja für einen eigenen Gültigkeitsbereich, es kann also sinnvoll sein, wenn Variablen im case deklariert werden.
    Den switch solltest du aber so machen:

    Code
    switch(selected)
    {
        case 1:
              bool2 = true;          // irrelevant
              bool1 = false;         // fenster schließt sich
              break;
        default:
              bool1 = false;
    }


    Du solltest dir jedoch ein paar Gedanken machen:
    Was ist bool1, wenn default erreicht wird?
    Warum verwendest du Konstanten wie 10 oder 38, es gibt doch sicherlich Namen für diese Zahlen?

    Viele liebe Grüße
    The User


    ich verwende diese zahlen weil sie in java so festgelegt sind.der keycode für die enter-taste ist halt 10.die pfeiltasten 37-40. "default: bool1 = false" hab ich nirgens stehn.hab alle "default" und unnötige klammern rausgenommen, bringt aber keine änderung.

    code der noch "irgendwie" damit zu tun hat...:


    wie gesagt,selected läuft korrekt mit...vlt hat java auch einfach nur ein problem mit dem switch im switch..ôo

  • Schon beim ersten Blick fällt auf, dass du uns da was wichtiges vorenthalten hast.

    Der von dir gepostete code zeigt den Fehler auf, du setzt im oberen Teil bei dem zweiten Switch zwar startmenu auf false, aber nie bool1 auf true. Ob du nun was anderes Probiert hast oder nicht, auf jeden fall kann das so nicht gehen.

    Sämtlicher Code erhebt keinen Anspruch auf syntaktische Korrektheit geschweige denn Ausführbarkeit und ist für die Implementation außerhalb der Beispiele nicht geeignet.
    [Blockierte Grafik: http://www.snippr.de/social/img/logo.png]
    Kein Support für kommerzielle Scripts | Kein kostenloser Support via ICQ

  • bool1 wird in einem anderen teil der keypressed-methode auf true gesetzt.den teil hab ich nich gepostet weil das alles nicht mehr überschaubar wäre.würde bool1 nicht irgendwo true werden würde ich ja nie in den switch rein kommen was ja relativ suboptimal wär..dann wüsst ich ja nichtmal ob er nun funzt oder nich.
    also hier nochmal der GANZE code, wenn ihr euch das unbedingt antun wollt: