2016-12-12 3 views
1

ブール値を調べる方が良い方法は何ですか? 前のメソッドがtrueを返したときにメソッドが呼び出されるコードがあります。 私はそれを達成するためにさまざまなアプローチを考え出しましたが、どちらが優れていますか?その答えの理由を記入してください。ブール条件を確認する方法はどちらかというと良いです

boolean check1=methodA(); 

boolean check2=methodB(); 

boolean check3=methodC(); 

if(check1==check2==check3==true){ 

method4(); 

} 

またはこれより良いこのようですか? true&&false&&falseは明らかにfalseとき

if(check1==check2==check3==true){ 
    method4(); 
} 

true==false==false==truetrueよりも、

if(check1 && check2 && check3){ 

method4(); 

} 
+1

読みやすいので、私は方法2に行くだろう – XtremeBaumer

+1

最初の方法は、あなたが意味すると思うことを意味しない – harold

+2

最初のオプションは混乱しています... false == false == true ==真はifあなたが望むものではありません。 – kimy82

答えて

1

check3 = falseの予想結果ではない与えます(一部は言及されていますが、私は簡単な概要については、それらを収集します)ために

外観、check1, check2, check3

    false == true
  • false, false, trueであるため
  • false, true, false((false == falsetrueあるため) false
  • true, false, falsetrue == falsefalseあるので)
  • true, true, truetrue == truetrueあるので)

これはまさにXNOR別名論理的平等の真理値表であることは驚くことではありません。技術的に、これは、「以前の方法は、値としてtrueを返した場合は[true]」それはに従って修正させる

は、「すべてのチェックが真である場合、それは他のいくつかのケースでも、ちょうど真である真であるとif "は単方向の意味合いなので、それについては何も言わない。しかし、ほとんどの場合、iff(意味がある場合)を意味し、間違っています。

3
if(check1 && check2 && check3){ 
    method4(); 
} 

は異なる意味を持っています。どうして?同じ優先順位の演算子がある場合は、左から右に移動します。

check1==check2==check3==trueは、実際には次のとおりです。

(((check1==check2)==check3)==true) 
(((true==false)==false)==true) 
(( false ==false)==true) 
(  true   ==true) 
       true 
1

第一の変形が間違っています。それは、最初の条件満たすための4つの方法がありますcheck1 = truecheck2 = false万全を期すために

関連する問題