2

float を返す関数を含むサブクラスがあります。if ステートメントが失敗し、else がそれをキャッチした場合、その関数を try catch ステートメントで呼び出します。return;

その関数は次のとおりです。

float calc(... some arguments ...) {
    ...

    if (operator.equals("+")) number = num1+num2;
    else if (operator.equals("-")) number = num1-num2;
    else if (operator.equals("*")) number = num1*num2;
    else if (operator.equals("/")) number = num1/num2;
    else return; // Here Netbeans gives me an error saying "Missing return value"

    return number;
}

これで、この関数は try で呼び出されます。else が実行された場合、関数を「クラッシュ」させて catch ステートメントに移動し、ユーザーにエラー メッセージを表示します。これはまさに私が望んでいた方法で動作しますが、Netbeans がエラーを出すのはなぜですか?? これを行う別の方法はありますか?

4

3 に答える 3

4

「クラッシュ」したくないと思いますが、何らかのエラーを示す必要があります。メソッドは を返さないため、void何も返さないとコンパイラ エラーになります。

代わりに、IllegalArgumentException.

else throw new IllegalArgumentException("Illegal operator: " + operator);

最後に実際に有効な値を返すことを確認してください。

return number;
于 2013-09-19T17:42:03.493 に答える
2

メソッドが宣言されている方法ではないため、return;この関数 ( return ) からはできません。常に値を返すという約束をしているvoidので、それを宣言するとき。float calcfloat

さらに、既にtry-catchブロック内にいるため、とにかく何も返したくありません。必要なのは、キャッチする例外をスローすることです。スローする例外が特定のケースに適していることを確認してください。私はあなたの関数が何をするかについて何も知らないので、あなたがスローすべき例外の種類を言うのは私ではありません。

public float calc(float[] args) throws Exception { // Use a more specific Exception!
    // do stuff
    if (somethingIsWrong) {
        throw new Exception("something is wrong!");
    }
    return number; // Always return a float!
}
于 2013-09-19T17:43:22.440 に答える