2017-01-30 34 views
2
public double get_volume(int a){ 
    try{ 
    if (a < 0) { 
     // this gets caught in the catch block 
     throw new IllegalArgumentException("Only Positive Numbers & no Letters Please!"); 
    } 
    return a*a*a; 
    } catch (IllegalArgumentException e) { 
    System.out.println(e.getMessage()); 
    } 
} 

Wenn diese Funktion einen negativen Wert erhält, wird eine Ausnahme ausgelöst, die besagt, dass sie nicht zulässig ist. Andernfalls wird das Volumen berechnet. Irgendwie muss ich noch etwas Wert zurückgeben, aber ist es wirklich nötig? Wie schreibe ich diesen Code richtig?Rückgabewert nach Auslösen der Ausnahme

+1

uh, manuell werfen, während gleichzeitig fangen, um die Ausnahme zu drucken macht keinen Sinn hier. – SomeJavaGuy

+0

Auch wenn Sie zurückkehren, können Sie diesen Wert nicht verwenden, wenn eine Ausnahme ausgelöst wird. – Azodious

+0

Okay, Sie haben die Ausnahme gefangen und behandelt, groß, was ist nun die Methode zu tun? Es ist erforderlich, einen Wert irgendeiner Art zurückzugeben – MadProgrammer

Antwort

6

Wenn Sie die Ausnahme in der Methode abfangen, ohne eine Ausnahme auf den Aufrufer zu werfen (wie Sie es gerade tun), müssen Sie einen Standardwert in Ihrem catch-Block zurückgeben.

Es wäre wahrscheinlich sinnvoller, die Ausnahme innerhalb der Methode nicht abzufangen, die es erlaubt, beim Auslösen der Ausnahme nichts zurückzugeben. Es informiert auch den Anrufer, dass sie eine ungültige Eingabe übergeben haben.

public double get_volume(int a) 
{ 
    if (a < 0) { 
     throw new IllegalArgumentException("Only Positive Numbers & no Letters Please!"); 
    } 
    return a*a*a;  
} 

Nun liegt es in der Verantwortung des Aufrufers, die Ausnahme zu behandeln.

Beachten Sie, dass seit IllegalArgumentException eine ungeprüfte Ausnahme ist (da es eine Unterklasse von RuntimeException ist), müssen Sie nicht diese Methode throws diese Ausnahme deklarieren. Es wäre jedoch hilfreich, im Javadoc zu beschreiben, wann Sie diese Ausnahme werfen.

+0

Sie denken nicht, dass das OP seine Nachricht vor 'System.out.println (e.getMessage()) drucken möchte;' –

+1

@YCF_L Wenn das OP will Um die Fehlermeldung innerhalb der Methode zu drucken, müssen Sie dies nicht in einem Ausnahmebehandler tun. Sie können einfach 'System.out.println (" Nur positive Zahlen & keine Buchstaben bitte! ")' Vor dem Auslösen der Ausnahme. Das sehe ich aber nicht so. – Eran

3

Sie werfen nicht wirklich eine Ausnahme, wenn Sie es auch in der gleichen Methode fangen. Ich denke, du hast etwas zu tun wie:

+0

Sie denken nicht, dass das OP seine Nachricht vor 'System.out.println (e.getMessage());' drucken möchte –

Verwandte Themen