2009-07-22 10 views
1

Ich schreibe eine Anwendung für einen Java-Kurs. Ich bin ein kompletter Anfänger und gehe gerade Material aus, das ich aus dem Kurs und aus dem Internet gelernt habe. Die Anwendung zeigt etwas Verhalten und ich bin mir nicht sicher, was es verursacht. Die Anwendung ist GUI-basiert und führt Berechnungen für Benutzereingaben durch. Für den Aktion Hörer Abschnitt habe ich eine Reihe von If-Anweisungen wie:Java-Anwendung if/case-Empfehlung

alle in einer Reihe wie die „wenn diese Schaltfläche, um diese tun, wenn Sie diese Taste, um dies tun“. Es sieht so aus, als würde die Anwendung ALLE if-Anweisungen ausführen, statt die zu starten, die der gedrückten Schaltfläche entspricht.

Wäre es besser, eine Case/Switch-Struktur für solche Dinge zu verwenden?

Ich kann meinen Code wenn nötig, ich bin neu um diese Website und bin mir nicht sicher, ob das Ding akzeptabel ist.

+3

Ja, bitte posten dein Code. – William

+0

Sie können den Code – Ariel

+0

eingeben Verwenden Sie else-ifs? Wenn nicht, solltest du. – AlbertoPL

Antwort

1

Sie sollten wahrscheinlich keinen einzigen Aktionslistener haben - ein separater für jedes Steuerelement zu erstellen hilft dabei, den Code lesbarer zu halten.

Wenn Ihre Steuerelemente jedoch viel Code freigeben (das Zeug vor oder nach den if-Anweisungen), dann könnte es sinnvoll sein, dies auf diese Weise zu tun. In diesem Fall sollte es if/elseif sein.

Auch Ihre Listener vollwertige Klassen (anstatt anonyme innere Klassen) können helfen, Code wieder zu verwenden (das Zeug in jeder if-Anweisung geht in jede Unterklasse). Dies kann über das hinausgehen, was Sie bisher gelernt haben.

Edit: (mehr direkte Antwort auf Ihre eigentliche Frage)

Soweit Ihr Problem, das wenn nicht alles ausführen soll, es sei denn Antwort entweder drs9222 ist, daß die Sie am Ende Ihrer wenn ein Semikolon wurden unter Verwendung von ist richtig, oder Ihre if-Anweisung testet die falsche Sache.

Sie könnten nur das, was Sie testen, posten, aber Sie müssen Ihr bekanntes "Button" -Objekt mit event.getSource() vergleichen, indem Sie == oder .equals verwenden. Da jedes Button-Objekt, mit dem Sie vergleichen, anders ist, sollte nur eines ausgeführt werden.

+0

Ich dachte, da die Anwendung so klein war, wäre ein einzelner Hörer in Ordnung. Seither ist es jedoch etwas gewachsen, und das mag ich am Ende auch tun. Im Geiste des Lernens möchte ich jedoch herausfinden, warum meine if-Aussagen so komisch sind. Subklassen zu bilden ist mir auch in den Sinn gekommen. Danke für deinen Beitrag. –

+0

+1 für eine Aktion, eine Aktion Listener. -10 für "vollwertige Klassen". –

+0

@tom Anonyme innere Klassen sind mit der Wiederverwendung von Code nicht sehr gut. Wenige Dinge werden nicht verbessert, indem sie zu einer vollständigen, wiederverwendbaren Klasse mit Mitgliedern und allen gemacht werden. Ich habe oft ziemlich viel Code von Menschen mit solchen Einstellungen in eine einzige Klasse 1/10 der Größe umgestaltet, weil sie nie in Betracht gezogen haben, dass Zuhörer mehr als nur nicht vollständige Klassen sein sollten und daher den Refactor nicht sehen konnten Hat den bösen Kopieren/Einfügen/Bearbeiten/Wiederholungstrick gemacht. –

2

Ohne den Code zu sehen, kann ich nicht sicher sagen, aber etwas, was ich immer gemacht habe, war einfach if und nicht else if - wenn mehrere meiner Bedingungen erfüllt waren, dann wurde der gesamte zugehörige Code ausgeführt. Wenn nur die erste Übereinstimmung ausgeführt werden soll, verwenden Sie if-else, um sicherzustellen, dass keine der folgenden Anweisungen ausgeführt wird.

+0

Der Code kann hier gefunden werden http://pastebin.com/m70593cb3 Es gibt 3 if-Anweisungen für ein Dropdown-Menü, und jede Schaltfläche hat ihre eigene if-Anweisung, kann es sinnvoller sein, wenn Sie den Code sehen. Danke für deine bisherige Einsicht. –

3

Bis ich den Code zu sehen Ich werde erraten müssen aber Ihre zugelassen Neuartigkeit gegeben Sie können schreiben, wenn Aussagen wie diese

if (condition); 
{ 
    ... 
} 

statt wie diese

if (condition) 
{ 
    ... 
} 
+0

Ich überprüfte doppelt, da ich weiß, dass dies Probleme verursachen kann, da ich diesen Fehler vorher gemacht habe, aber meine Aussagen enden nicht mit Semikolon. Der Code kann hier gefunden werden http://pastebin.com/m70593cb3, wenn Sie einen Höhepunkt nehmen wollen –

+3

Nach einem sehr schnellen Blick sehe ich, dass Zeilen 141, 169 und 198 dieses Problem haben – drs9222

+0

ahh, wie habe ich das mehrmals vermisst ... Entschuldigung, ich habe es gerade nochmal angeschaut und habe sie dort gesehen..meine Augen müssen faul werden;) danke –