4 Programmablauf bei Ausnahmen

Submitted by javafrage on Wed, 01/09/2013 - 20:30

Das folgende Javaprogramm wirft eine ArithmeticException wegen einer Division durch Null in der Methode divide().

Welche Konsolenausgaben erzeugt das Programm wegen seiner System.out.println() Aufrufe?

Das Beispielprogramm:

package s1.block10;
public class Frage4 {

   public static void main(String[] args) {
      int a = 5;
      int b = 0;
      int c = 0;
      System.out.println("main:before");
      c = doubleDiv(a, b);
      System.out.println("main:after");
   }

   static int doubleDiv(int a, int b) {
      int d;
      System.out.println("doubleDiv:before");
      d = 2 * divide(a, b);
      System.out.println("doubleDiv:after");
      return d;
   }

   static int divide(int a, int b) {
      int d;
      System.out.println("divide:before");
      d = a / b;
      System.out.println("divide:after");
      return b;
   }
}
Niveau 2
Schwierigkeitsgrad mittel
Zeit 4 Minuten

 

Antwort zu Frage 3: Erkennen von Ausnahmen im Quellcode

public class Ausnahme {
  
   public static void main(String[] args) {
      int a = 5; int b = 0;
      int c = 0;
      System.out.println("main:Anfang"); // 1
      c = divAussen(a, b);
      System.out.println("main:Ende"); // 7
   } // Ende von main
  
   static int divAussen(int a, int b) {
      int d;
      System.out.println("divAussen:Anfang"); // 2
      try {
        d = 2 * divInnen(a, b);
      } catch (ArithmeticException e) {
        System.out.println("divAussen: Division durch Null");
        d = -2;
      }
      System.out.println("divAussen:Ende"); // 6
      return d;
   } // Ende von divAussen
   
   static int divInnen(int a, int b) {
      int d;
      System.out.println("divInnen:Anfang"); // 3
      try {
         d = a / b; // Hier tritt eine Ausnahme auf
      } catch (IllegalArgumentException e) {
         System.out.println("divInnen: Division durch Null");
         d = -1;
      } catch (RuntimeException e) {
         System.out.println("divInnen: Division durch Null;" + " RuntimeException"); // 4
         d = -2;
      }
      System.out.println("divInnen:Ende"); // 5
      return d;
   } // Ende von divInnen
} // Ende der Klasse.

Anonymous (not verified)

Sun, 06/02/2013 - 13:31

Hallo,

ich bin von dem "feuern" von "IllegalArgumentException" verwirrt.
Laut Definition dürfte es doch bei einer Division durch 0 gar nicht zu einer solchen kommen (4), nur bei einer "ArithmeticException".

Wenn ich das Programm laufen lasse gibt es mir auch folgende Ausgaben:
run:
main:Anfang (1)
divAussen:Anfang (2)
divInnen:Anfang (3)
divInnen: Division durch Null; RuntimeException (4)
divInnen:Ende (5)
divAussen:Ende (6)
main:Ende (7)
BUILD SUCCESSFUL (total time: 0 seconds)

... es kommt also nach (3) zu keiner IllegalArgumentException.

Es fehlt in ihrer Lösung auch "divInnen:Ende (5)"

MfG .. Norman WIBI 12B

Stefan Schneider

Sun, 06/02/2013 - 15:55

In reply to by Anonymous (not verified)

Gut beobachtet,
Fehler wurde korrigiert.
Die Konsolenausgaben sind:
main:Anfang
divAussen: Anfang
divInnen: Anfang
divInnen: Division durch Null; RuntimeException
divInnen: Ende
divAussen: Ende
main: Ende