studyklar
GdI 1 · Übungsblatt 5 · Aufgabe 5

Rechner mit Code 1 bis 4: die switch-Anweisung

Ein kleiner Taschenrechner: zwei Zahlen eingeben, dann mit einem Code von 1 bis 4 wählen, ob addiert, subtrahiert, multipliziert oder dividiert wird. Die Auswahl trifft eine switch-Anweisung. Zwei Eingaben dürfen das Programm nicht aus dem Tritt bringen: ein falscher Code und die Division durch 0. Rechts steht das Programm, die Zeilen zum aktuellen Schritt sind hervorgehoben.

Die Aufgabe

Aufgabe 5.5

Schreiben Sie ein Java-Programm A5_5, welches zunächst zwei reelle Zahlen A und B einliest. Durch weitere Eingabe einer Ganzzahl im Bereich 1 bis 4 wird dann eine Rechenoperation ausgewählt, welche auf die eingegebenen Zahlen anzuwenden ist. Die Zuordnung des Zahlencodes zu den Operationen ist wie folgt:

1Addition
2Subtraktion
3Multiplikation
4Division

Wird eine andere Zahl eingegeben, so soll eine Fehlermeldung ausgegeben werden, anderenfalls das Ergebnis der Rechnung. Realisieren Sie die Auswahl der Operation mit einer Switch-Anweisung.

Schließen Sie durch geeignete Abfragen im Programm die Division durch 0 aus.

Das Programm liest drei Werte: die Zahlen A und B (mit Nachkommastellen möglich) und einen ganzzahligen Code. Der Code sagt, welche Rechnung ausgeführt wird. Bei einem Code außerhalb von 1 bis 4 kommt eine Fehlermeldung. Teilt man durch B = 0, ebenfalls.

Merke: Hängt die Auswahl an einer einzigen ganzen Zahl mit festen Werten, passt switch: je Wert ein case, für alles andere default.
  1. Warum switch.
  2. A, B und den Code einlesen.
  3. Die Fälle 1 bis 3 schreiben.
  4. Fall 4 mit Schutz vor der Division durch 0.
  5. Der Fall „anderer Code“ mit default.
  6. Jeden Zweig einmal testen.

Warum switch

CodeRechnung
1A + B
2A − B
3A · B
4A / B, nur wenn B ≠ 0
sonstFehlermeldung

Die Auswahl hängt an einer einzigen Variablen, dem Code, und sie wird mit festen Zahlen verglichen: 1, 2, 3, 4. Mit if bräuchte man eine Kette aus vier Abfragen code == 1, code == 2, … Die switch-Anweisung schreibt das kürzer: Sie springt direkt zum passenden Fall. Die Aufgabe verlangt sie ausdrücklich.

Aus Skript 4, Folien 4-45 und 4-46 („Switch-Anweisung“): switch (Ausdruck) berechnet den Ausdruck und springt zur passenden case-Marke; passt keine, zu default. break springt ans Ende der Switch-Anweisung. Der Ausdruck muss ganzzahlig, char oder String sein.

A, B und den Code einlesen

public class A5_5 {     public static void main(String[] args) {        Out.print("A = ");        double a = In.readDouble();        Out.print("B = ");        double b = In.readDouble();        Out.print("Code (1 = +, 2 = -, 3 = *, 4 = /): ");        int code = In.readInt();
    }}

„Reelle Zahlen“ heißt: Kommazahlen sind erlaubt. Darum sind a und b vom Typ double und werden mit In.readDouble() gelesen; getippt wird mit Punkt statt Komma, 7,5 also als 7.5. Der Code ist eine Ganzzahl, also int mit In.readInt(). Das passt auch zu switch, das einen ganzzahligen Ausdruck braucht.

Aus Skript 4, Folien 4-30 und 4-33 („Ein-/Ausgabe“): In.readInt() liest eine ganze Zahl, In.readDouble() eine Kommazahl (Typ double). Out.print(x) gibt x aus und bleibt in der Zeile. In und Out sind Hilfsklassen der Vorlesung, keine Java-Standardklassen; wie man sie einbindet, steht in Aufgabe 5.1 („Abstand zweier Punkte mit Math.sqrt“).
Noch 6 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Abbildung 1

public class A5_5 {     public static void main(String[] args) {        Out.print("A = ");        double a = In.readDouble();        Out.print("B = ");        double b = In.readDouble();        Out.print("Code (1 = +, 2 = -, 3 = *, 4 = /): ");        int code = In.readInt();         switch (code) {            case 1:                Out.println("A + B = " + (a + b));                break;            case 2:                Out.println("A - B = " + (a - b));                break;            case 3:                Out.println("A * B = " + (a * b));                break;            case 4:                if (b == 0) {                    Out.println("Fehler: Division durch 0 ist nicht erlaubt.");                } else {                    Out.println("A / B = " + (a / b));                }                break;            default:                Out.println("Fehler: Code " + code + " gibt es nicht. Erlaubt sind 1 bis 4.");        }    }}
LegendeRechts entsteht das Programm. Die blassen Zeilen kommen in den nächsten Schritten.