2012-05-28 43 views
0

所以基本上給了下面的代碼。這不就是突破了if語句嗎?

action = 2;mode = 1是否將i設置爲2?

我正在研究一個同事代碼,它是這樣寫的,但我認爲中斷只會跳過if並繼續其餘的case 2。所以基本上if語句是毫無意義的。

switch(action){ 

    case 1: i = 1; break; 

    case 2: if(mode == 1) 
      { 
       break; 
      } 

      i = 2; 
      break; 

    case 3: i = 3; break; 

伊夫改寫此爲:

case 2: if(mode != 1) 
      i = 2; 
     break; 

但它不是唯一的地方,多一些複雜。如果我要重構它,我需要一些信息,我是正確的。

回答

1

JLS section 14.15

break語句將控制轉移出一個封閉語句。

BreakStatement:

break Identifieropt ; 

沒有標籤break語句試圖將控制轉移到最內層包圍緊挨其封閉方法或初始化塊的switchwhiledo,或for(強調)語句;這個被稱爲中斷目標的語句然後立即正常完成。

+0

感謝您提供可靠來源的詳細解答。 – Doomsknight

7

有沒有這樣的事,作爲一個「如果循環。」 Break不能引用「if」語句。

的指針語言規範見Wasserman's answer

此外,假設1 < =行動< = 3,代碼被簡化爲:

if(! (action == 2 && mode == 1)) { 
    i = action; 
} 
1

您的重構是正確的,如果這就是你想要知道的。

+0

的確如此,但你沒有回答這個問題'這是否會突破if語句?' +1爲正確性,-1爲非題目性 – Tharwen

1

如果action == 2mode == 1,i = 2將不會被執行(爲什麼你不測試它?它會比在這裏要求更快)。

但你的改進是清潔反正,我會用它。

+0

Theres在某處意外執行某些事情的錯誤。但是,也許我應該爲它編寫一個測試應用程序。 ;) – Doomsknight

+0

只要製作一個主要方法粘貼代碼並添加action = 2; mode = 1,這是你的測試。 – Ixx