2014-12-03 120 views
0

出於某種原因,switch語句無法顯示正確答案

int x = 5; 
switch (x) { 
    case 3 : x += 1; 
    System.out.println(x); 
    case 4 : x += 2; 
    System.out.println(x); 
    case 5 : x += 3; 
    System.out.println(x); 
    case 6 : x++; 
    System.out.println(x); 
    case 7 : x += 2; 
    System.out.println(x); 
    case 8 : x--; 
    System.out.println(x); 
    case 9 : x++; 
    System.out.println(x); 
} 

(忽略了SOP的),此開關語句的結果一直給我11,在紙上計算時,我不斷收到10.我認爲它有與增量有關,但無法弄清楚它顯示的原因11.我錯過了什麼?

回答

2

我認爲這是相當直截了當:

int x = 5; 
    switch (x) { 
    case 3 : x += 1; 
    System.out.println(x); 
    case 4 : x += 2; 
    System.out.println(x); 
    case 5 : x += 3;  /* found a match, so start here. now x=8 */ 
    System.out.println(x); 
    case 6 : x++; /* no break statement, so now x=9 */ 
    System.out.println(x); 
    case 7 : x += 2; /* no break statement, so now x=11 */ 
    System.out.println(x); 
    case 8 : x--; /* no break statement, so now x=10 */ 
    System.out.println(x); 
    case 9 : x++; /* no break statement, so now x=11 */ 
    System.out.println(x); 

    } 
+0

所以switch語句如果是第一種情況後,沒有中斷自動執行下一個案件在它​​的身上?我認爲在情況5中x = 8之後,情況會變爲8,然後是7,然後是9 – X1XX 2014-12-03 03:40:37

+0

@PatrickBui:對你的第一句話是,對你的第二句是。它找到第一個匹配,並且在(按順序)之後執行每行,直到它遇到break語句。 – Gerrat 2014-12-03 03:43:26

+0

@PatrickBui沒有開關不能像那樣工作。只是認爲它的工作原理是:首先它打到'switch()'語句,並根據當時的值,跳轉到相應的標籤,並執行從該標籤開始的所有語句 – 2014-12-03 03:43:51

1

由於交換機中沒有break指令,因此執行了5-9個案。 X計算:

x = 5 + 3 + 1 + 2 -1 + 1 == 11