2014-10-18 40 views
1

從邏輯上講,我認爲答案應該是0,打印出來是2我對switch語句的理解有什麼問題?

public class Switch{ 
public static void main(String[] args){ 

int x = 3; int y = 4; 

    switch (x + 3) { 
    case 6: y = 0; 
    case 7: y = 1; 
    default: y += 1; 
    } 
System.out.print(y); 
} 
} 

這是我會怎樣想的代碼應該運行:

1)添加X + 3回答是6.

2)情況下,6回答6.這導致0是新值6.

3相關),我們忽略大小寫7和默認值,因爲殼體6適應的需要。

4)系統打印出y的新值,該值是0。

這是我錯了,因爲2打印出來。我的思想在哪裏錯了,我對開關語句的理解錯過了什麼?

+3

你錯過了'break'語句。 – 2014-10-18 18:29:11

+1

如果您傳遞'-Xlint'選項,'javac'會警告您這些延遲。 – 2014-10-18 18:29:35

+0

由於您沒有任何'break',您將訪問每個'case'。在第一種情況下,'y'是0,那麼它是1,那麼它是2,這就是返回的值。 – Maroun 2014-10-18 18:30:51

回答

3

一旦在Switch語句中選擇了一個Case,代碼執行就從那裏直接下來,這意味着它正在執行所有的情況。如果您鴕鳥政策想的是,使用break語句:

switch (x + 3) { 
    case 6: y = 0; break; 
    case 7: y = 1; break; 
    default: y += 1; break; 
    } 
+2

有沒有必要爲'默認'案例添加'break' – 2014-10-18 18:31:11

+0

好吧我現在明白了。謝謝。 – 2014-10-18 18:33:15

+0

@ChristopherBabayans如果您對答案滿意,那麼將其標記爲已接受。這將使航海家對這個問題得到滿意的回答。 – 2014-10-18 19:00:51

1

switch你「落空」的情況下,從一個匹配的開始。所以在這裏,你輸入case 6,然後case 7然後default。可以防止這種現象與break關鍵字:

switch (x + 3) { 
    case 6: 
     y = 0; 
     break; 
    case 7: 
     y = 1; 
     break; 
    default: 
     y += 1; 
     break; 
}