2015-10-18 56 views
1

我能夠解決從編碼網站附加的代碼。但是,我的答案不同於網站的答案。下面貼出的是代碼。無法理解java中的流程控制

static boolean b1, b2; 
public static void main(String [] args) 
{ 
    int x = 0; 
    if (!b1) /* Line 7 */ 
    { 
     if (!b2) /* Line 9 */ 
     { 
      b1 = true; 
      x++; 
      if (5 > 6) 
      { 
       x++; 
      } 
      if (!b1) 
       x = x + 10; 
      else if (b2 = true) /* Line 19 */ 
       x = x + 100; 
      else if (b1 | b2) /* Line 21 */ 
       x = x + 1000; 
     } 
    } 
    System.out.println(x); 
} 
} 

我的想法:

最初,B1 =假和b2 =假時,它把前兩個如果條件 和套b1至真除了遞增x到> 1的值。從那裏它開始出現問題了每個條件和打印>終值是1。

網站的解決方案:

爲實例變量,B1和B2被初始化爲false。第7行和第9行的if test
成功,因此b1設置爲true,並且x是
遞增。如果測試成功,則在第19行(注意>
代碼未測試以查看b2是否爲真,它將b2設置爲> true)。
由於線路19成功,隨後其他-IF的(21號線)>將
skipped.The x的最終值是101

我不從網站解決方案明白什麼:

「請注意,代碼未測試以查看b2是否爲真,它將 b2設置爲true」。 如何在不測試狀態的情況下將b2的值設置爲「true」?

任何建議可以非常有幫助!

+0

引號應該是引號,而不是代碼 –

+3

這是一種測試讀者注意力的方法,它使用''b2 = true'''而不是''b2 == true''',所以b2被賦值爲真。 – Siddhartha

+0

檢查=的數量。 –

回答

2

第19行是:

else if (b2 = true) 

編碼的網站可能正試圖教你一個常見的編程錯誤,即。使用分配=而不是比較==

(如上面寫)的代碼分配的trueb2的值而不是b2的值進行比較,以true。賦值表達式的結果是true因此if將總是成功並且其代碼塊將被執行。無論執行此代碼行之前的值爲b2,都會發生這種情況。

如果您使用的是什麼,可能是爲了,即:

else if (b2 == true) 

那麼比較將發生和if表達(及其塊的執行)將取決於b2值。