studyklar
GdI 1 · Übungsblatt 11 · Aufgabe 2

Division durch 0 mit try-catch abfangen

Der Rechner aus Übungsblatt 5 bekommt zwei Änderungen: Er rechnet mit ganzen Zahlen, und die Division durch 0 fängt er nicht mehr mit if ab, sondern mit einer try-catch-Anweisung. Rechts steht das neue Programm, die Zeilen zum aktuellen Schritt sind hervorgehoben.

Die Aufgabe

Übungsblatt 11

Auf die Verwendung der Klassen In und Out soll ab sofort verzichtet werden. Realisieren Sie alle Ein- und Ausgaben mit den Möglichkeiten der Java-Klassenbibliothek.

Aufgabe 11.2

Kopieren Sie Ihr Java-Programm A5_5 in die Datei A11_2.java. Ändern Sie den Datentypen double der ein- und auszugebenden Variablen zu int. Löschen Sie dann den Code zur Vermeidung einer Division durch 0. Fangen Sie die Division durch 0 stattdessen mit einer try-catch-Anweisung ab. Die betreffende Ausnahme trägt die Bezeichnung ArithmeticException.

Ausgangspunkt ist das Programm A5_5: Es liest zwei Zahlen A und B und einen Code von 1 bis 4 und rechnet dann plus, minus, mal oder geteilt. Drei Dinge ändern sich: Die Zahlen werden int statt double. Die if-Abfrage vor der Division fällt weg. Stattdessen fängt eine try-catch-Anweisung den Fehler ab. Dazu kommt die Vorgabe des Blatts: keine Kursklassen In und Out mehr.

Merke: Eine Ausnahme (englisch exception) ist ein Fehler, der erst beim Ausführen auftritt. Ohne Behandlung bricht das Programm ab. Mit try und catch legt man fest, was stattdessen passieren soll.
  1. Vergleichen: was von A5_5 bleibt, was sich ändert.
  2. In und Out durch Scanner und System.out ersetzen.
  3. double zu int ändern.
  4. Die Abfrage löschen und sehen, was bei B = 0 passiert.
  5. Die Division mit try-catch absichern.
  6. Jeden Zweig testen.

Was von A5_5 bleibt

StelleA5_5A11_2
EingabeIn.readDouble(), In.readInt()Scanner mit nextInt()
AusgabeOut.print, Out.printlnSystem.out.print, System.out.println
A und Bdoubleint
Fall 4if (b == 0) … else …try … catch (ArithmeticException e) …
Fälle 1 bis 3, defaultswitch mit case und breakunverändert

Das Gerüst bleibt: drei Werte einlesen, dann wählt switch (code) die Rechnung, default meldet einen falschen Code. Die Fälle 1 bis 3 bleiben gleich. Neu sind nur die Ein- und Ausgabe, der Typ der Zahlen und der Fall 4.

Aus Blatt 5, Aufgabe 5 („Rechner mit Code 1 bis 4: die switch-Anweisung“): A5_5 liest A und B als double und den Code als int. case 1 bis case 4 rechnen, default meldet einen falschen Code. Im Fall 4 prüft if (b == 0) vor dem Teilen.

Scanner und System.out statt In und Out

import java.util.Scanner; public class A11_2 {     public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        System.out.print("A = ");
        System.out.print("B = ");
        System.out.print("Code (1 = +, 2 = -, 3 = *, 4 = /): ");        int code = sc.nextInt();        sc.close();

In und Out gehören nicht zu Java, sie stammen aus der Vorlesung. Ab jetzt nimmt man die Klassenbibliothek. Zum Lesen von der Tastatur dient die Klasse Scanner. import java.util.Scanner; macht sie bekannt, new Scanner(System.in) legt einen Scanner an, der von der Tastatur liest. sc.nextInt() liest dann die nächste ganze Zahl.

Für die Ausgabe ersetzt System.out.print das Out.print und System.out.println das Out.println. Nach dem letzten Lesen schließt sc.close() den Scanner. Die Zeilen 8 und 10 für A und B folgen im nächsten Schritt, denn dort ändert sich auch der Typ.

Aus Skript 6, Folie 6-52 („Eingabe von der Tastatur – 1“): Scanner sc = new Scanner(System.in); legt einen Scanner an; nextInt(), nextDouble() und next() lesen eine ganze Zahl, eine Kommazahl und ein Wort; sc.close() schließt ihn.
Noch 5 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

import java.util.Scanner; public class A11_2 {     public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        System.out.print("A = ");        int a = sc.nextInt();        System.out.print("B = ");        int b = sc.nextInt();        System.out.print("Code (1 = +, 2 = -, 3 = *, 4 = /): ");        int code = sc.nextInt();        sc.close();         switch (code) {            case 1:                System.out.println("A + B = " + (a + b));                break;            case 2:                System.out.println("A - B = " + (a - b));                break;            case 3:                System.out.println("A * B = " + (a * b));                break;            case 4:                try {                    System.out.println("A / B = " + (a / b));                } catch (ArithmeticException e) {                    System.out.println("Fehler: Division durch 0 ist nicht erlaubt.");                }                break;            default:                System.out.println("Fehler: Code " + code + " gibt es nicht. Erlaubt sind 1 bis 4.");        }    }}
LegendeDas Programm A11_2, das in dieser Aufgabe entsteht. Hervorgehoben ist erst nur das Gerüst der Klasse.