Zum Forum springen
Benachrichtigungen
Alles löschen

Java ArithmeticException

5 Beiträge
3 Benutzer
0 Reactions
399 Ansichten
Floppy83
Beigetreten: 10.09.2006

Hallo der folgende Quelltext wirft bei eclipse folgenden Fehler aus.

"This method must return a result of type double"

Ich weiß auch das der Quellcode viel kürzer sein kann und es völlig übertrieben ist erst die integer variablen in double variablen umzuwandeln und dann erst zu rechnen. Dies mache ich nur weil ich nicht weiß wie der Compiler immernoch auf den Fehler kommt. Wenn ich die Exception nicht einbaue funktioniert die Methode, aber mit try und catch Block gibts den obigen Fehler.

Hat jemand nen Tipp für mich?

Danke schonmal für alle Antworten

int numerator;

int denominator;

public double toDouble() {

try {

double a = numerator;

double b = denominator;

double ergebnis = a / b;

return ergebnis;

} catch (ArithmeticException e) {

System.out.println("Division durch '0' ist nicht definiert");
}
}


Antwort
Zitat
4 Antworten
OriEy
Beigetreten: 24.08.2006

Der Fehler kommt nicht weil die division schief lief, sonder weil er auch nach dem tra/catch block noch ein "return blabla" haben will.
Selbst wenn eine exception kommt muss er mit was weitermachen können und etwas ausgeben.


Antwort
Zitat
Floppy83
Beigetreten: 10.09.2006

wow epic fail :facepalm:

Danke dir!!!

edit: Aso kann dann natürlich auch wieder zu.


Antwort
Zitat
Floppy83
Beigetreten: 10.09.2006

Naja da der Thread doch noch offen ist, hab ich mal doch noch ne Frage:

public double toDouble() {

try {

return (double) numerator / (double) denominator;

} catch (ArithmeticException e) {

System.out.println("ArithmeticException: Es wird durch den Wert 0 geteilt");
}

return 0;

}

Wenn ich nun für denominator '0' einsetze, müsste eigentlich die eingebaute ArithmeticException anspringen. Tut es aber nicht, sondern es kommt ne infinity Fehlermeldung. Wenn ich es ohne die oben fettgedruckten double castoperatoren mache, funktioniert es und es wird die ArithmeticException ausgeworfen.

Warum denn dies?


Antwort
Zitat
sarc
Beigetreten: 06.06.2008

Weil double den Wert unendlich darstellen kann (und genau der kommt raus, wenn man durch 0 teilt). Das sollte auch nicht direkt ne Fehlermeldung schmeißen, weil dieses Ergebnis in double eben definiert ist.

Ohne die Casts funktionierts übrigens auch nicht, schau dir zum Beispiel mal an, was dann bei 1/2 rauskommt...

Die sauberste Methode wäre, direkt bei der Erzeugung des Bruchs zu prüfen, ob der Nenner 0 ist, und falls ja direkt hier mit ner Fehlermeldung abzubrechen.


Antwort
Zitat