it-swarm.com.de

Java Wie können Sie einen Wert aus try, catch und finally zurückgeben?

Wenn ich also einen Code aus Blöcken in einem "try {}" mache und versuche, einen Wert zurückzugeben, wird "no return values" ausgegeben. Dies ist der Code, den ich verwende und der mein Problem darstellt.

import org.w3c.dom.ranges.RangeException;


public class Pg257E5 
{
public static void main(String[]args)
{

    try
    {
        System.out.println(add(args));
    }
    catch(RangeException e)
    {
        e.printStackTrace();
    }
    finally
    {
        System.out.println("Thanks for using the program kiddo!");
    }

}
public static double add(String[] values) // shows a commpile error here that I don't have a return value
{
    try
    {
        int length = values.length;
        double arrayValues[] = new double[length];
        double sum =0;
        for(int i = 0; i<length; i++)
        {
            arrayValues[i] = Double.parseDouble(values[i]);
            sum += arrayValues[i];
        }

        return sum; // I do have a return value here. Is it because if the an exception occurs the codes in try stops and doesn't get to the return value?
    }
    catch(NumberFormatException e)
    {
        e.printStackTrace();
    }
    catch(RangeException e)
    {
        throw e;
    }
    finally
    {
        System.out.println("Thank you for using the program!");// so would I need to put a return value of type double here?
    }

}
}

Grundsätzlich habe ich die Frage: "Wie geben Sie einen Wert zurück, wenn Sie try and catch block verwenden?

16
user2522281

Um bei Verwendung von try/catch Einen Wert zurückzugeben, können Sie eine temporäre Variable verwenden, z.

public static double add(String[] values) {
    double sum = 0.0;
    try {
        int length = values.length;
        double arrayValues[] = new double[length];
        for(int i = 0; i < length; i++) {
            arrayValues[i] = Double.parseDouble(values[i]);
            sum += arrayValues[i];
        }
    } catch(NumberFormatException e) {
        e.printStackTrace();
    } catch(RangeException e) {
        throw e;
    } finally {
        System.out.println("Thank you for using the program!");
    }
    return sum;
}

Andernfalls müssen Sie in jedem Ausführungspfad (try-Block oder catch-Block) einen Return haben, der kein throw enthält.

24
Uwe Plonus

Das liegt daran, dass Sie sich in einer try Anweisung befinden. Da es könnte einen Fehler geben, wird sum könnte nicht initialisiert. Geben Sie daher Ihre return-Anweisung in den finally -Block ein. Auf diese Weise wird sie mit Sicherheit zurückgegeben .

Stellen Sie sicher, dass Sie die Summe außerhalb von try/catch/finally Initialisieren, damit sie im Gültigkeitsbereich liegt.

2
Dynomyte

Hier ist ein weiteres Beispiel, das mit try/catch einen booleschen Wert zurückgibt.

private boolean doSomeThing(int index){
    try {
        if(index%2==0) 
            return true; 
    } catch (Exception e) {
        System.out.println(e.getMessage()); 
    }finally {
        System.out.println("Finally!!! ;) ");
    }
    return false; 
}
1
Ata ul nasar

Das Problem ist, was passiert, wenn Sie NumberFormatexception geworfen bekommen? Du druckst es aus und gibst nichts zurück.

Hinweis: Sie müssen keine Ausnahme abfangen und zurückwerfen. Normalerweise wird es umbrochen oder Stapelverfolgung gedruckt und zum Beispiel ignoriert.

catch(RangeException e) {
     throw e;
}
1
Tala