29

したがって、 内でブロックのコードを実行し、値を取得try{}しようとすると、return

戻り値なし

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?
    }

}
}

try私の質問は、 andを使用しているときにどのように値を返すのcatchですか?

4

4 に答える 4

37

使用時に値を返すにはtry/catch、一時変数を使用できます。

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;
}

それ以外の場合は、を持たないすべての実行パス (try ブロックまたは catch ブロック) に return が必要ですthrow

于 2013-07-01T13:36:07.590 に答える
3

それはあなたがtry声明の中にいるからです。エラーが発生する可能性があるため、合計が初期化されない可能性があるため、return ステートメントをfinallyブロックに配置すると、確実に返されます。

try/catch/finallyスコープ内にあるように、外で sum を初期化してください。

于 2013-07-01T13:38:14.353 に答える
3

これは、try/catch を使用してブール値を返す別の例です。

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; 
}
于 2015-10-02T17:48:06.253 に答える
2

NumberFormatexception問題は、投げられたときにどうなるかです。あなたはそれを印刷し、何も返しません。

注: 例外をキャッチしてスローする必要はありません。通常、それをラップするか、スタック トレースを出力して、たとえば無視します。

catch(RangeException e) {
     throw e;
}
于 2013-07-01T13:34:33.557 に答える