2.3 Verzweigungen Verzweigung mit zwei Alternativen: die if-Anweisung. if (x > y) max = x; if (x > y) { max = x; min = y; } if (x > y) max = x; else max = y; if (x > y) { max = x; min = y; } else { max = y; min = x; } Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 54 Semantik: Es wird eine boolsche Bedingung ausgewertet. Diese liefert entweder den boolschen Wert true oder false. In Abhängigkeit von diesem Wert wird entweder der then-Block oder der else-Block (sofern vorhanden) durchlaufen. if (x > y) max = x; boolsche Bedingung then-Block if (x > y) { max = x; min = y; } if (x > y) max = x; else max = y; boolsche Bedingung then-Block if (x > y) { max = x; min = y; } else { max = y; min = x; } Rainer Feldmann Universität Paderborn else-Block Technische Informatik für Ingenieure (TIFI) WS 09/10 55 Einrückungen if (x > y) { max = x; min = y; } else { max = y; min = x; } Rainer Feldmann Universität Paderborn Die Anweisungen des then-Blocks bzw. des elseBlocks sollten eingerückt werden. Dies ist zwar nicht zwingend erforderlich, erhöht aber die Lesbarkeit eines Programms: Technische Informatik für Ingenieure (TIFI) WS 09/10 56 Einrückungen if (x > y) { max = x; min = y; } else { max = y; min = x; } Die Anweisungen des then-Blocks bzw. des elseBlocks sollten eingerückt werden. Dies ist zwar nicht zwingend erforderlich, erhöht aber die Lesbarkeit eines Programms: if(x>y){max=x;min=y;}else{max=y;min=x;} Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 56 Einrückungen if (x > y) { max = x; min = y; } else { max = y; min = x; } Die Anweisungen des then-Blocks bzw. des elseBlocks sollten eingerückt werden. Dies ist zwar nicht zwingend erforderlich, erhöht aber die Lesbarkeit eines Programms: if(x>y){max=x;min=y;}else{max=y;min=x;} Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 56 Formatierung von Java-Quelltexten mit Eclipse Java Programme können in Eclipse in eine “schöne” Form gebracht werden: Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 57 Formatierung von Java-Quelltexten mit Eclipse Java Programme können in Eclipse in eine “schöne” Form gebracht werden: Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 58 Formatierung von Java-Quelltexten mit Eclipse Java Programme können in Eclipse in eine “schöne” Form gebracht werden: Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 59 Dangling else Der then-Block bzw. der else-Block einer ifAnweisung kann wiederum eine if-Anweisung enthalten. Das kann zu Problemen führen: Frage: Zu welchem if gehört das else ? Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) if (x > y) if (x > z) max = x; else max = y; WS 09/10 60 Dangling else Der then-Block bzw. der else-Block einer ifAnweisung kann wiederum eine if-Anweisung enthalten. Das kann zu Problemen führen: Frage: Zu welchem if gehört das else ? if (x > y) if (x > z) max = x; else max = y; Bemerkungen: • Das Programmfragment rechts oben ist korrekt! • Die Sprachdefinition von Java (und anderen Programmiersprachen) enthält hier eine Mehrdeutigkeit. • Die Mehrdeutigkeit wird aufgelöst, indem man festlegt, dass ein else immer zum unmittelbar vorangegangenen if gehört. • Eine Einrückung wie rechts unten hätte also die Semantik der Anweisung richtig beschrieben. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) if (x > y) if (x > z) max = x; else max = y; WS 09/10 60 Dangling else Der then-Block bzw. der else-Block einer ifAnweisung kann wiederum eine if-Anweisung enthalten. Das kann zu Problemen führen: Frage: Zu welchem if gehört das else ? if (x > y) if (x > z) max = x; else max = y; ¶ Im Zweifel: Klammern {} setzen! Bemerkungen: µ • Das Programmfragment rechts oben ist korrekt! • Die Sprachdefinition von Java (und anderen Programmiersprachen) enthält hier eine Mehrdeutigkeit. • Die Mehrdeutigkeit wird aufgelöst, indem man festlegt, dass ein else immer zum unmittelbar vorangegangenen if gehört. • Eine Einrückung wie rechts unten hätte also die Semantik der Anweisung richtig beschrieben. Rainer Feldmann Universität Paderborn ³ Technische Informatik für Ingenieure (TIFI) ´ if (x > y) { if (x > z) max = x; else max = y; } WS 09/10 60 Boolsche Ausdrücke Operator == != > < >= <= Bedeutung gleich nicht gleich größer kleiner größer oder gleich kleiner oder gleich Beispiel x == 3 x != y 4 > 3 x < y x >= y x <= y Beachte: if (x == 0) Out.println("x ist Null"); ist korrekt, aber if (x = 0) Out.println("x ist Null"); ist nicht korrekt, da x = 0 eine Zuweisung ist und kein Vergleich. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 61 Der Datentyp boolean Der Datentyp boolean ist ein Datentyp wie int, enthält aber nur die Werte true und false. Diese können durch boolsche Operationen miteinander verknüpft werden: Operanden And Or Not x y x && y x || y !x true true true true false true false false true false false true false true true false false false false true Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) George Boole, 1815-1864 WS 09/10 62 Der Datentyp boolean Der Datentyp boolean ist ein Datentyp wie int, enthält aber nur die Werte true und false. Diese können durch boolsche Operationen miteinander verknüpft werden: Operanden And Or Not x y x && y x || y !x true true true true false true false false true false false true false true true false false false false true George Boole, 1815-1864 Beispiele: boolean p,q; p = false; q = x > 0; p = (p || q) && x < 10; if (0 <= x && x <= 10 || 100 <= x && x <= 110) y=x; if (!(x > 0)) x = -x; if (x <= 0) x = -x; Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) /* unschön! */ /* schöner */ WS 09/10 62 Schnellauswertung von Boolschen Ausdrücken • Die Auswertung von Boolschen Ausdrücken in Java bricht ab, sobald der Wert des Ausdrucks feststeht. • Die Auswertunsgreihenfolge ist dabei von links nach rechts. Beispiele: if (y != 0 && x/y < 10) ... Im oberen Ausdruck wird zunächst y != 0 geprüft. Hat dieser Teilausdruck schon den Wert false, so wird x/y < 10 nicht mehr geprüft. if (x < 0 || x > 10) ... Im mittleren Ausdruck wird zunächst x < 0 geprüft. Hat dieser Teilausdruck schon den Wert true, so wird x > 10 nicht mehr geprüft. if (x/y < 10 && y != 0 ) ... Der untere Ausdruck ist kritisch! Warum ? Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 63 Vorrangregeln bei zusammengesetzten Vergleichen ³ ¶ ! bindet stärker als && welches stärker bindet als || µ ´ Beispiel: x = 20; y = 1; p = false; if (!p && y==0 || x>=0 && x<=10) ... ¾ Welchen Wert hat der boolsche Ausdruck ? ½ Rainer Feldmann Universität Paderborn » ¼ Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ³ ¶ ! bindet stärker als && welches stärker bindet als || µ ´ Beispiel: x = 20; y = 1; p = false; if (!p && y==0 || x>=0 && x<=10) ... ¾ » Welchen Wert hat der boolsche Ausdruck ? ½ ¼ Syntaxbaum bauen! Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ ? Beispiel: x = 20; y = 1; p = false; if (!p && y==0 || x>=0 && x<=10) ... ¾ » Welchen Wert hat der boolsche Ausdruck ? ½ ¼ Syntaxbaum bauen! Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: ? x = 20; y = 1; p = false; ? if (!p && y==0 || x>=0 && x<=10) ... ¾ » Welchen Wert hat der boolsche Ausdruck ? ½ ¼ Syntaxbaum bauen! Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: && x = 20; y = 1; p = false; ? if (!p && y==0 || x>=0 && x<=10) ... ¾ » Welchen Wert hat der boolsche Ausdruck ? ½ ? ? ¼ Syntaxbaum bauen! Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: && x = 20; y = 1; p = false; ? if (!p && y==0 || x>=0 && x<=10) ... ! ¾ » Welchen Wert hat der boolsche Ausdruck ? ½ ? ¼ ? Syntaxbaum bauen! Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: && x = 20; y = 1; p = false; ? if (!p && y==0 || x>=0 && x<=10) ... ! ¾ » Welchen Wert hat der boolsche Ausdruck ? ½ ¼ ? p Syntaxbaum bauen! Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: && x = 20; y = 1; p = false; ? if (!p && y==0 || x>=0 && x<=10) ... ! ¾ y==0 » Welchen Wert hat der boolsche Ausdruck ? ½ ¼ p Syntaxbaum bauen! Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ³ ¶ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: && x = 20; y = 1; p = false; && if (!p && y==0 || x>=0 && x<=10) ... ! ¾ y==0 » Welchen Wert hat der boolsche Ausdruck ? ½ ¼ ? ? p Syntaxbaum bauen! Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: && x = 20; y = 1; p = false; && if (!p && y==0 || x>=0 && x<=10) ... ! ¾ y==0 » Welchen Wert hat der boolsche Ausdruck ? ½ ¼ x>=0 ? p Syntaxbaum bauen! Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: && x = 20; y = 1; p = false; && if (!p && y==0 || x>=0 && x<=10) ... ! ¾ y==0 x>=0 x<=10 » Welchen Wert hat der boolsche Ausdruck ? ½ ¼ p Syntaxbaum bauen! Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: && x = 20; y = 1; p = false; && if (!p && y==0 || x>=0 && x<=10) ... ¾ Welchen Wert hat der boolsche Ausdruck ? ½ » ! y==0 x>=0 x<=10 ¼ Syntaxbaum von links nach rechts auswerten! p false Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: && x = 20; y = 1; p = false; && if (!p && y==0 || x>=0 && x<=10) ... true ¾ Welchen Wert hat der boolsche Ausdruck ? ½ » ! y==0 x>=0 x<=10 ¼ Syntaxbaum von links nach rechts auswerten! p false Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: && x = 20; y = 1; p = false; && if (!p && y==0 || x>=0 && x<=10) ... true ¾ Welchen Wert hat der boolsche Ausdruck ? ½ » ! y==0 x>=0 x<=10 false ¼ Syntaxbaum von links nach rechts auswerten! p false Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: false && x = 20; y = 1; p = false; && if (!p && y==0 || x>=0 && x<=10) ... true ¾ Welchen Wert hat der boolsche Ausdruck ? ½ » ! y==0 x>=0 x<=10 false ¼ Syntaxbaum von links nach rechts auswerten! p false Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: false && x = 20; y = 1; p = false; && if (!p && y==0 || x>=0 && x<=10) ... true ¾ Welchen Wert hat der boolsche Ausdruck ? ½ » ! y==0 x>=0 false true x<=10 ¼ Syntaxbaum von links nach rechts auswerten! p false Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: false && x = 20; y = 1; p = false; && if (!p && y==0 || x>=0 && x<=10) ... true ¾ Welchen Wert hat der boolsche Ausdruck ? ½ » ! y==0 x>=0 x<=10 false true false ¼ Syntaxbaum von links nach rechts auswerten! p false Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ || Beispiel: false false && x = 20; y = 1; p = false; && if (!p && y==0 || x>=0 && x<=10) ... true ¾ Welchen Wert hat der boolsche Ausdruck ? ½ » ! y==0 x>=0 x<=10 false true false ¼ Syntaxbaum von links nach rechts auswerten! p false Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Vorrangregeln bei zusammengesetzten Vergleichen ¶ ³ ! bindet stärker als && welches stärker bindet als || µ ´ false || Beispiel: false false && x = 20; y = 1; p = false; && if (!p && y==0 || x>=0 && x<=10) ... true ¾ Welchen Wert hat der boolsche Ausdruck ? ½ » ! y==0 x>=0 x<=10 false true false ¼ Syntaxbaum von links nach rechts auswerten! p false Syntaxbaum für !p && y==0 || x>=0 && x<=10 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 64 Zusicherungen bei Verzweigungen ¾ » Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben. ½ if (a > b) { if (a > c) x = a; else x = c; } else { if (b > c) x = b; else x = c; } Rainer Feldmann Universität Paderborn ¼ Welchen Wert enthält x nach Ausführung des Programmteils ? Technische Informatik für Ingenieure (TIFI) WS 09/10 65 Zusicherungen bei Verzweigungen ¾ » Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben. ½ if (a > b) { if (a > c) x = a; else x = c; } else { if (b > c) x = b; else x = c; } Rainer Feldmann Universität Paderborn ¼ /* a > b */ Zusicherungen helfen, ein Programm verständlich zu machen. Technische Informatik für Ingenieure (TIFI) WS 09/10 65 Zusicherungen bei Verzweigungen ¾ » Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben. ½ if (a > b) { if (a > c) x = a; else x = c; } else { if (b > c) x = b; else x = c; } Rainer Feldmann Universität Paderborn ¼ /* a > b */ /* a > b und a > c */ Zusicherungen helfen, ein Programm verständlich zu machen. Technische Informatik für Ingenieure (TIFI) WS 09/10 65 Zusicherungen bei Verzweigungen ¾ » Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben. ½ if (a > b) { if (a > c) x = a; else x = c; } else { if (b > c) x = b; else x = c; } Rainer Feldmann Universität Paderborn ¼ /* a > b */ /* a > b und a > c */ /* a > b und c >= a */ Zusicherungen helfen, ein Programm verständlich zu machen. Technische Informatik für Ingenieure (TIFI) WS 09/10 65 Zusicherungen bei Verzweigungen ¾ » Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben. ½ if (a > b) { if (a > c) x = a; else x = c; } else { if (b > c) x = b; else x = c; } Rainer Feldmann Universität Paderborn ¼ /* a > b */ /* a > b und a > c */ /* a > b und c >= a */ /* b >= a */ Zusicherungen helfen, ein Programm verständlich zu machen. Technische Informatik für Ingenieure (TIFI) WS 09/10 65 Zusicherungen bei Verzweigungen ¾ » Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben. ½ if (a > b) { if (a > c) x = a; else x = c; } else { if (b > c) x = b; else x = c; } Rainer Feldmann Universität Paderborn ¼ /* a > b */ /* a > b und a > c */ /* a > b und c >= a */ /* b >= a */ /* b >= a und b > c */ Zusicherungen helfen, ein Programm verständlich zu machen. Technische Informatik für Ingenieure (TIFI) WS 09/10 65 Zusicherungen bei Verzweigungen ¾ » Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben. ½ ¼ if (a > b) { /* a > if (a > c) /* a > b und a > x = a; else /* a > b und c >= x = c; } else { /* b >= if (b > c) /* b >= a und b > x = b; else /* b >= a und c >= x = c; } Rainer Feldmann Universität Paderborn b */ c */ a */ a */ c */ Zusicherungen helfen, ein Programm verständlich zu machen. b */ Technische Informatik für Ingenieure (TIFI) WS 09/10 65 Zusicherungen bei Verzweigungen ¾ » Eine Zusicherung ist eine Aussage über den Zustand eines Programmes (d.h. den Inhalt seiner Variablen) an einer bestimmten Stelle. Sie wird als Kommentar geschrieben. ½ ¼ if (a > b) { /* a > if (a > c) /* a > b und a > x = a; else /* a > b und c >= x = c; } else { /* b >= if (b > c) /* b >= a und b > x = b; else /* b >= a und c >= x = c; } Rainer Feldmann Universität Paderborn b */ c */ a */ a */ c */ b */ Zusicherungen helfen, ein Programm verständlich zu machen. Mit den Zusicherungen ist sofort klar, dass x nach Ausführung des Programmteils das Maximum der drei Werte a,b,c enthält. Technische Informatik für Ingenieure (TIFI) WS 09/10 65 Negation zusammengesetzter Ausdrücke Gilt im then-Zweig einer if-Anweisung ein zusammengesetzter Ausdruck A, so gilt im else-Zweig die Negation !A von A. ' $ Regeln von DeMorgan (1806-1871): !(A && B) !(A || B) ≡ ≡ !A || !B !A && !B & % Beispiel: if (0 <= x && x < 10) ... else /* x < 0 || x >= 10 */ ... Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 66 Effizienzbetrachtungen $ ' Die Effizienz eines Programmes wird bzgl. zweier Masse gemessen: • Zeit: Wie viele elementare Operationen führt das Programm aus ? • Speicherplatz: Wie viele Speicherzellen benötigt das Programm zur Ausführung ? & % if (a > b) if (a > c) x = a; else x = c; else if (b > c) x = b; else x = c; x = a; if (b > x) x = b; if (c > x) x = c; Beide Programme berechnen in x das Maximum von a,b,c. Irgendwie ist das rechte Programm kleiner“, vielleicht sogar schöner“. ” ” Aber: Das linke Programm ist zeiteffizienter“: Es führt immer genau 2 Vergleiche und eine ” Zuweisung aus. Das rechte Programm führt im Durchschnitt 2 Vergleiche und 2 Zuweisungen aus! Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 67 Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung. int month; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12 : days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: days = 28; break; default: Out.println("Error"); } Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 68 Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung. • Hinter dem Schlüsselwort switch muss ein Ausdruck vom Typ int stehen. int month; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12 : days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: days = 28; break; default: Out.println("Error"); } Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 68 Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung. int month; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12 : days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: days = 28; break; default: Out.println("Error"); } Rainer Feldmann Universität Paderborn • Hinter dem Schlüsselwort switch muss ein Ausdruck vom Typ int stehen. • In Abhängigkeit vom Wert dieses Ausdrucks wird einer der Anweisungsblöcke ausgeführt. Technische Informatik für Ingenieure (TIFI) WS 09/10 68 Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung. int month; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12 : days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: days = 28; break; default: Out.println("Error"); } Rainer Feldmann Universität Paderborn • Hinter dem Schlüsselwort switch muss ein Ausdruck vom Typ int stehen. • In Abhängigkeit vom Wert dieses Ausdrucks wird einer der Anweisungsblöcke ausgeführt. • Anweisungsblöcke werden mit break abgeschlossen, sofern nicht noch ein späterer Anweisungsblock ausgeführt werden soll. Technische Informatik für Ingenieure (TIFI) WS 09/10 68 Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung. int month; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12 : days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: days = 28; break; default: Out.println("Error"); } Rainer Feldmann Universität Paderborn • Hinter dem Schlüsselwort switch muss ein Ausdruck vom Typ int stehen. • In Abhängigkeit vom Wert dieses Ausdrucks wird einer der Anweisungsblöcke ausgeführt. • Anweisungsblöcke werden mit break abgeschlossen, sofern nicht noch ein späterer Anweisungsblock ausgeführt werden soll. • Hinter default steht der Anweisungsblock, der ausgeführt wird, wenn keiner der vorhergegangenen Anweisungblöcke ausgeführt wurde. Technische Informatik für Ingenieure (TIFI) WS 09/10 68 Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung. int month; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12 : days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: days = 28; break; default: Out.println("Error"); } Rainer Feldmann Universität Paderborn • Hinter dem Schlüsselwort switch muss ein Ausdruck vom Typ int stehen. • In Abhängigkeit vom Wert dieses Ausdrucks wird einer der Anweisungsblöcke ausgeführt. • Anweisungsblöcke werden mit break abgeschlossen, sofern nicht noch ein späterer Anweisungsblock ausgeführt werden soll. • Hinter default steht der Anweisungsblock, der ausgeführt wird, wenn keiner der vorhergegangenen Anweisungblöcke ausgeführt wurde. Technische Informatik für Ingenieure (TIFI) WS 09/10 68 Verzweigung mit mehr als zwei Alternativen: die switch-Anweisung. Frage: Warum nicht mit if (month==1 || ... || month==12) days = 31; else if (month==4 || ... || month==11) days = 30; else if (month==2) days = 28; else Out.println("Error"); • Die switch-Anweisung ist schneller, weil sie die Alternativen nicht wie die if-Anweisung eine nach der anderen prüft, sondern über eine Tabelle die passenden Blöcke direkt nach Auswertung des int-Ausdrucks anspringt. Sie benötigt aber Speicherplatz für die Tabelle. • Die switch-Anweisung ist bei mehr als 2 Alternativen übersichtlicher. • Die switch-Anweisung kann viel Speicherplatz benötigen, wenn die einzelnen Alternativen sehr weit auseinanderliegende Werte haben: switch (...) { case 0: ... break; case 1000: ... break; default: } Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 69 Syntax der Verzweigungen • Verzweigung mit zwei Alternativen <ifStatement> ::= if ( <boolAusdruck> ) <Statement> [ else <Statement> ] • Verzweigung mit mehr als zwei Alternativen <switchStatement> <switchGruppe> <switchLabel> <Block> Rainer Feldmann Universität Paderborn ::= ::= ::= ::= switch ( <intAusdruck> ) { <switchGruppe> } <switchLabel> { <switchLabel> } <Block> { <Block> } case <konstAusdruck> : | default: <Anweisungen> | <Variablendefinition> | . . . Technische Informatik für Ingenieure (TIFI) WS 09/10 70