2016-12-18 4 views
-1

与えられた引数xが0であるかどうかを調べるメソッドを作成しようとしています。もしそうなら、例外をスローし、xを0に設定します。例外をスローして0に設定する

InvalidParameterException 

これは私がtryブロックを使用する必要があります質問がある

private static double mayBePositive(double x, String msg){ 
    if (x < 0){ 
     x = 0; 
     throw new InvalidParameterException(msg); 
    } 
    return x; 
} 

を持っているコードのですか?そして、これを行う最善の方法は何ですか、私は上記のコードが適切に動作しないことを知っていますが、私はこれを理解することはできません。

+3

これはX/Y問題のように聞こえます:あなたはXをしたい、あなたはそれを行う方法として上記(Y)を考えていました。そして今あなたはYを実装している問題について尋ねていますXとは何ですか? –

+1

'x'を0に設定し、例外を投げつけて私に過度の縫い目をつけます。例外、特に 'InvalidArgumentException'や' InvalidParameterException'がスローされた場合、渡された引数が無効であることがわかります。 'x'を0に設定すると、その値は現在有効であり、例外は無用です。例外を投げると、その値を無駄にするようになり、その値を設定すると例外が無駄になってしまいます。 –

+0

"上記のコードが正しく動作しないことを知っています"このメソッドが何を期待していますか? –

答えて

5

あなたのメソッドは例外をスローして、更新されたxを返すことはできません。 のいずれかをスローするか、値を返すことができます。これらは相互に排他的なオプションです。 x0を投げた場合の設定は「デッドストア」と呼ばれます(コントロールがメソッドを離れるときにxが存在しなくなるため、その値は決して使用されません)。

これは、単一エントリ配列またはカスタムラッパーオブジェクトを受け入れることによって、並べ替えることができます。これにより、配列内のその項目の値を変更するために副作用が発生しますまたは例外をスローする前にそのラッパーオブジェクトのプロパティを取得することができますが、解決しようとしている問題を解決する正しい方法とは考えにくいです。

+0

それは意味をなさないので、xが-1の場合、例外をスローすることはできず、同時に値を0に設定することはできません。 – Exzlanttt

+0

@Exzlanttt:いいえ。 :-) –

+2

@Exzlantttコールサイトから送信することはできますが、この方法は役に立たないようです。 –

関連する問題