2016-04-12 11 views
0

以下のコードは、ifステートメントが別のステートメントにネストされているため、最初のifステートメントが間違っている場合は下のコードを実行すると入れ子になったifステートメントも実行されません。ネストされたIfステートメント

私は、これはあなたが第二文の場合はtrueを作ることができないことを意味知っているが、私の質問は単純です:による第一に忠実ますが、無視声明文は偽である、またはある場合場合

が第二です2番目のif文はすべて偽ですか?

私の質問のためのコードは以下の通りです:

int temperature; 
myWindow.clearOut(); 
temperature = Integer.parseInt(myWindow.readIn()); 
if (temperature >= 18) { 
    myWindow.writeOutLine(temperature + " is greater than or equal to 18"); 
    if (temperature % 2 == 0) 
     myWindow.writeOutLine(temperature + " is an even number"); 

} 
+2

2番目の 'if'ステートメントはシュレーディンガーの猫です。評価されることはないので真実でも偽でもありません。 –

+0

@OriLentzありがとうございました:) –

答えて

0

ネストされたことが評価されず、完全に無視されないよう文が真か偽でもない場合。 (オリとベルガーのおかげで)。

2

あなたは第一if文がに評価された場合、それが実行されないますので、第二のif文がに評価されるかどうかわかりません。

これは現代のプログラミング言語の仕組みです。実行すべきコードがコマンドスタックに追加されています。最初のステートメントがの場合、と評価された場合、ifの本文内の何もスタックに追加されません。

0

これを行うには3つの方法があります。自分で決めなければなりません。

/** 
* Warning on temp >= 18. 
* Warning on temp >= 18 && temp is even. 
*/ 
public void test1() { 
    if (temperature >= 18) { 
     myWindow.writeOutLine(temperature + " is greater than or equal  to 18"); 
     if (temperature % 2 == 0) { 
      myWindow.writeOutLine(temperature + " is an even number"); 
     } 
    } 
} 

/** 
* Warning on temp >= 18. 
* Warning on temp is even. 
*/ 
public void test2() { 
    if (temperature >= 18) { 
     myWindow.writeOutLine(temperature + " is greater than or equal  to 18"); 
    } 
    if (temperature % 2 == 0) { 
     myWindow.writeOutLine(temperature + " is an even number"); 
    } 

} 

/** 
* Warning on temp >= 18. 
* Warning on temp < 18 && temp is even. 
*/ 
public void test3() { 
    if (temperature >= 18) { 
     myWindow.writeOutLine(temperature + " is greater than or equal  to 18"); 
    } else if (temperature % 2 == 0) { 
     myWindow.writeOutLine(temperature + " is an even number"); 
    } 
} 
+0

私はちょうど2つの場合は、テストとして一緒にトラップステートメントを、私は間違っている私を修正プログラムを実行していますが、test3は、文が間違っている場合 –

+0

@TimothyKardaras - 正解ですが、機会はありません。それは 'test1 - > A && B'、' test2 - > A || B ||両方 '、' test3 - > A || B '。 – OldCurmudgeon

0

温度は、18以上であることは事実であってもまでであれば、あなたが知っていることはありませんので、状態は実際、最初の1に調整されている場合...

なは、アプリケーションのバグを見つけるために、ピットフォールすることができカスケード条件...

STAT場合、私は条件

+0

私はインデントがちょっとやっかいかもしれないと思っていますが、私の条件の順序、特にそのような小さなプログラムでは何が間違っていますか? –

0

第二の順序を変更することをお勧めします最初のif文if (temperature >= 18)が真の場合にのみ実行されます。