3 Ko n tr o lls t ru k t ur en 2 Mehrseitige Auswahl 3 Wiederholung 3.2 Mehrseitige Auswahl Es gibt zwei Formen der mehrseitigen Auswahl, die sich darin unterscheiden, wie man sie programmieren kann. Die erste Art ist sehr speziell und beruht darauf, dass die einzelnen Fälle sich durch feste Einzelwerte bestimmen lassen. Struktogramm: Ausdruck Wert 1 Wert 2 Wert 3 Anweisung 1 Anweisung 2 Anweisung 3 sonst Anweisung n Die mehrseitige Auswahl stützt ihre Wahl auf einen abzählbaren (ordinal) Datentyp, den Selektor, der mehr als zwei Werte annehmen kann, z. B. int oder char. In Abhängigkeit des aktuellen Wertes wird dann eine von vielen Möglichkeiten ausgewählt und ausgeführt. Die Syntax lautet in Java: switch(c) { case wert1: Anweisung1; case wert2: Anweisung2; case wert3: Anweisung3; case wert4: Anweisung4; case wert5: Anweisung5; default: AnweisungS; }//switch break; break; break; break; break; Der default-Teil kann auch weggelassen werden, wenn keine sonstige Anweisung nötig ist. Grundlagen der Programmierung mit JAVA © datadidact 2016 33 Ko n tr o lls t ru k t ur en 3 2 Mehrseitige Auswahl 3 Wiederholung Problemstellung Ein Programm Notenausgabe soll wie folgt ergänzt werden: Es soll eine Note (1..6) eingegeben werden. Das Programm wandelt die Note in den entsprechenden Text um (1 = sehr gut; 2 = gut;..; 6 = ungenuegend) Struktogramm (verkürzte Schreibweise): note 1 3 2 A:"sehr gut" A:"gut" 4 A:"befriedigend" A:"ausreichend" sonst 6 5 A:"mangelhaft" A:"ungenügend" A:"Fehler!" Die Problemlösung Notenausgabe: [1] public class Notenausgabe [2] { [3] public static void main(String argv[]) [4] { [5] int note; [6] note = 3;//sollte über Tastatur eigelesen werden... [7] switch(note) [8] { [9] case 1: System.out.println(″sehr gut″);break; [10] case 2: System.out.println(″gut″);break; [11] case 3: System.out.println(″befriedigend″);break; [12] case 4: System.out.println(″ausreichend″);break; [13] case 5: System.out.println(″mangelhaft″);break; [14] case 6: System.out.println(″ungenuegend″);break; [15] default: System.out.println(″Fehler.″); [16] }//switch(note) [17] System.out.println(″Programmende Notenausgabe.″); [18] }//public static void main(String argv[]) [19] }//public class Notenausgabe 34 Grundlagen der Programmierung mit JAVA © datadidact 2016 Ko n tr o lls t ru k t ur en 3 2 Mehrseitige Auswahl 3 Wiederholung Falls der Selektor aus einem ganzen zusammenhängenden Bereiche besteht, so muss auf die zweifache Auswahl zurückgegriffen werden. Struktogramm: Ausdruck Bereich 1 Bereich 2 Bereich 3 Anweisung 1 Anweisung 2 Anweisung 3 sonst Anweisung n Problemstellung Das Programm Ziffer untersucht eine positive ganze Zahl (im Bereich von 0 bis 99) und stellt fest, ob die Zahl eine oder zwei Stellen hat. Wird eine Zahl eingegeben, die außerhalb des zu untersuchenden Bereiches liegt, dann wird die Meldung „mehr als zwei Ziffern!“ auf dem Bildschirm ausgegeben. Struktogramm (verkürzte Schreibweise): zahl 0..9 A:"eine Ziffer!" 10..99 A:"zwei Ziffern!" sonst A:"mehr als zwei Ziffern!" Lösung: [1] public class Ziffer [2] { [3] public static void main(String argv[]) [4] { [5] int zahl; [6] zahl = 5;//Kann auch über Tastatur eingelesen werden [7] if(zahl>=0 && zahl <=9) System.out.println(″Eine Ziffer! ″); [8] else if (zahl>=10 && zahl <=99) System.out.println(″Zwei Ziffern! ″); [9] else System.out.println(″Mehr als zwei Ziffern! ″); [10] System.out.println(″Programmende Ziffer.″); [11] }//public static void main(String argv[]) [12] }//public class Ziffer Grundlagen der Programmierung mit JAVA © datadidact 2016 35 3 Ko n tr o lls t ru k t ur en 2 Mehrseitige Auswahl 3 Wiederholung Grundlegende Übungsaufgaben 1. Arbeitsauftrag 3.3 (MonName.java) Schreiben Sie ein Programm, das die Monatsnamen „Januar“ bis „Dezember“ ausgibt, wenn eine der Zahlen von 1 bis 12 eingegeben wird. 2. (Brief.java) Briefe werden nach ihrem Gewicht frankiert. Es gelten folgende Portobeträge: bis (g) 20 50 100 250 500 1000 Euro 1,- 1,70 2,40 3,20 4,00 4,80 Sendungen schwerer als 1kg werden als Päckchen oder Paket verschickt. Schreiben Sie ein Programm, das nach Eingabe des Gewichtes das Porto ausgibt. 3. (QuadGl.java) Die quadratische Gleichung ax2 + bx + c = 0 ist zu lösen. Denken Sie daran, dass die Lösungen imaginär sein können. Hinweis: Wurzeln werden in Java mit der Funktion Math.sqrt(x) berechnet (Bemerkung: x muss vom Typ double sein!). 4. (Volumen.java) Es sollen die Volumina und Oberflächen von Zylinder, Würfel, Quader, Kreiskegel oder Kugel berechnet werden. Erstellen Sie ein Programm, das die Eingabe der Körperform und der notwendigen Maße erlaubt und danach die Werte berechnet. Hinweis: Die Kreiszahl Pi ist in Java über Math.PI benutzbar. 1. MonName.java: Ausgabe des Monatsnamens Nummer des Monats (1..12): 4 Der 4. Monat heisst April. Programmende MonName. Ausgabe des Monatsnamens Nummer des Monats (1..12): 15 Es gibt nur 12 Monate! Programmende MonName. 2. Brief.java: Portoberechnung Gewicht des Briefes in g: 75.6 Kosten: 2.40 Euro Programmende Brief. Portoberechnung Gewicht des Briefes in g: 1500 Das wird ein Paket! Programmende Brief. 36 Grundlagen der Programmierung mit JAVA © datadidact 2016