Axel Richter: Exceptions in Funktionen (Rückgabe)

Beitrag lesen

Hallo,

aus einem Servlet heraus möchte ich in der Klasse "Berechnungen" die Funktion "getTeilen" aufrufen:

int demoInt = getTeilen(a,b);

Die Funktion getTeilen sieht dann ungefähr so aus:

public class Berechnungen{
 public Berechnungen() {
 }
 public int getTeilen(int a, int b) {
  String result = new String();
         try {
                  return a/b;
  } catch (Exception e) {
    result = "Division durch 0";
  }
 }
}

Das gibt einen Compiler-Fehler:
missing return statement
 public int getTeilen(int a, int b) {
                                    ^
1 error

Irgendwas _musst_ Du auch im Catch-Zweig zurückgeben.

So, und jetzt möchte ich gerne im Servlet wissen, ob die Berechnung erfolgreich war oder ob die Exception zugeschlagen hat. "result" ist aber ein String und kann ja nicht zurückgegeben werden, da die Funktion vom Typ int ist...

Wie kann man dieses Problem (elegant) lösen?

Willst Du _wirklich_ das Ergebnis der Division als _Ganzzahlwert_ haben? Dann würde ich in der Klasse Berechnungen einen String Meldung und eine Methode getMeldung() definieren, in der eventuelle Fehler angezeigt werden. Wenn es Dir egal ist, welcher Fehler, dann würde auch ein boolean Fehler (false/true) reichen.

Du kannst aber auch grundsätzlich mit Floats rechnen. Eine Float-Division durch 0 ist allerdings _kein_ Fehler, sondern ergibt Infinity. Das kann allerdings auch mit Float.isInfinite() geprüft werden.
http://java.sun.com/j2se/1.3/docs/api/java/lang/Float.html

import java.lang.*;

public class bsp {
  public static void main(String[] args) {
    int demoInt;
    float demoFloat;
    String Meldung = new String();

Berechnungen b = new Berechnungen();
    demoInt = b.getTeilen(7,3);
    Meldung = b.getMeldung();
    System.out.println(Meldung);
    System.out.println(demoInt);

demoInt = b.getTeilen(5,0);
    Meldung = b.getMeldung();
    System.out.println(Meldung);
    System.out.println(demoInt);

demoFloat = b.getTeilen2(7,3);
    Meldung = b.getMeldung();
    System.out.println(Meldung);
    System.out.println(demoFloat);

demoFloat = b.getTeilen2(5,0);
    Meldung = b.getMeldung();
    System.out.println(Meldung);
    System.out.println(demoFloat);
  }
}

class Berechnungen{
 private String Meldung = new String();

Berechnungen() {
    Meldung = "init";
 }

public String getMeldung() {
    return Meldung;
 }

public int getTeilen(int a, int b) {
  try {
    Meldung = "Operation erfolgreich abgeschlossen.";
    return a/b;
  } catch (Exception e) {
    Meldung = "Fehler: ".concat(e.getMessage());
    return 0;
  }
 }

public float getTeilen2(int a, int b) {
  try {
    Meldung = "Operation erfolgreich abgeschlossen.";
    return (float)a/(float)b;
  } catch (Exception e) {
    Meldung = "Fehler: ".concat(e.getMessage());
    return 0;
  }
 }
}

viele Grüße

Axel