2017-11-30 11 views
1

これを改善する方法に関する提案はありますか?私は計算結果を変数に代入したいが、0の場合は値1を代入したい。次のように動作するが、計算を2回記述する必要はない。三元演算子の明確化

int result = x-y > 0 ? x-y : 1; 
+0

'x-y'を別の変数に保存し、それを条件チェックで使用すると何が問題になりますか? – jrook

+0

'int result = x-y == 0? 1:x-y; ' – Zico

+0

' int result = x> y? x-y:1' –

答えて

2

あなたは常に非負の整数の結果を持つことになりますと仮定(すなわちなし0以上)、あなたは代わりに次を使用して試すことができます:

int result = Math.max(x - y, 1); 

ここで論理は、もし結果がすべきです上記の式は結果に1を代入します。結果が1の場合、1をとり、1より大きい結果の場合はその値を保持します。

私はあなたの三元表現をさらに単純化することはできません。

int result = x - y; 
result = result > 0 ? result : 1; 

これで2行のコードが完成しました。いずれにしても、コンパイラはあなたが書いたものを私が上に書いたものに最適化することができます。つまり、計算は2度は行われません。

+0

優れています。私はMath.maxアプローチがより良いアプローチであり、私が考慮しなかったアプローチだと思います。ありがとう! –