2014-12-03 2 views
0

По какой-то причине,переключатель заявление не отображается правильный ответ

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); 
} 

(Игнорируйте СОП), результат этого переключателя заявление продолжает давать мне 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

Так переключатель заявление автоматически делает следующий случай в его теле, если нет перерыва после первого случая? Я думал, что после x = 8 в случае 5, случай будет идти до 8, затем 7, затем 9 – X1XX

+0

@PatrickBui: Да к вашему первому предложению, а не к вашему второму. Он находит первое совпадение и выполняет каждую строку после (по порядку), пока не попадет в оператор break. – Gerrat

+0

@PatrickBui Нет переключателя не работает. Просто подумайте, что он работает так: сначала он попал в оператор 'switch()' и основывался на значении в этот момент, перепрыгнул на соответствующую метку и выполнил все инструкции, начиная с этой метки –

1

Поскольку в вашем коммутаторе нет инструкции break, выполняются шкафы 5-9. X расчет:

x = 5 + 3 + 1 + 2 -1 + 1 == 11 
Смежные вопросы