Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Java - If-Anweisung/Switch-Anweisung transformieren (http://www.informatikerboard.de/board/thread.php?threadid=750)


Geschrieben von Groeten am 22.07.2010 um 18:45:

  Java - If-Anweisung/Switch-Anweisung transformieren

Meine Frage:
Hallo!

Ist es immer möglich eine If(-Else)-Anweisung in eine Switch-Anweisung zu transformieren und bzw. oder umgekehrt?!

Meine Ideen:
Also ich bin bislang bei dem Schluss, dass es immer möglich ist IF in SWITCH (abgekürzt geschrieben...) zu transformieren, sofern die Variable bei SWITCH gültig ist (=> char, byte, short, int) , da die if bzw. if-else, bzw. else Anweisungen einfach zu case1, case2 etc. sowie default umgeschrieben werden können.

Von SWITCH nach IF jedoch würde ich sagen, dass es nicht immer möglich ist, da der sog. "Fallthrough" in IF so nicht umsetzbar ist.


Liege ich mit meinen Meinungen richtig?! smile




Danke & viele Grüße



Geschrieben von 3FingerbreitNougat am 22.07.2010 um 19:46:

  RE: Java - If-Anweisung/Switch-Anweisung transformieren

Hallo LL,

Willkommen an Board =)

IF bietet insgesamt mehr Flexibilität und hat auch einen anderen Anwendungsbereich als switch. Bei SWITCH kann man nur 1 Kriterium nehmen, bei IF sind sogar ganze Ausdrücke möglich (z.B. Funktionen als Bedingung).

Zitat:
da der sog. "Fallthrough" in IF so nicht umsetzbar ist.

Normalerweise möchte man auch keinen Fallthrough und ich empfehle dir auch ohne dieses "Feature" zu programmieren, da schnell Fehler auftreten.


IF(-ELSE) -> SWITCH:
Ist nur möglich wenn die if-Anweisung sehr simple Bedingungen hat wie Zahlen vergleichen o.ä.
code:
1:
2:
3:
4:
5:
6:
7:
if (n==0) {
    foo();
} else if (n==2) {
    bar();
} else {
    foobar();
}
wird zu
code:
1:
2:
3:
4:
5:
6:
7:
8:
switch (n) {
case 0: foo();
        break;
case 2: bar();
        break;
default: foobar();
       break;
}

(Hier könnte man die letzte break-Anweisung weglassen, da default normalerweise ganz unten steht (wegen Fallthrough)).

SWITCH -> IF(-ELSE):
Immer möglich. Du schreibst dass man hier keinen Fallthrough hat. Das stimmt, aber diese sollte ohnehin vermieden werden! Der Fallthrouth ist meiner Meinung nach ein Fehler unsauberer Programmierung.

In anderen Worten: Anders als du schreibst ist eine Umschreibung von SWITCH -> IF(-ELSE) immer möglich, solange du den Fallthrough nicht "willst".

MfG



Geschrieben von Groeten am 23.07.2010 um 15:38:

 

Hey Kapitän... großes Grinsen


Ganz großes Danke für deine Erklärung!
Ist echt genial und beantwortet all meine Fragen!!! Daumen hoch



Grüße


PS: Bzgl. d. "Fallthrough": Würde den auch nicht direkt benutzen; bezieht sich hierbei auch nur auf reine, universitäre Theorie...



Geschrieben von CookieMonsta am 24.07.2010 um 11:44:

 

BTW:

code:
1:
2:
3:
4:
if (n==0) foo();
if (n==2) bar();


usw, wäre dann ein switch case ohne break anweisungen


Forensoftware: Burning Board, entwickelt von WoltLab GmbH