Переключение операторов - PullRequest
5 голосов
/ 24 мая 2011

Для операторов switch возможно ли изменить значение переключателя внутри оператора switch так, чтобы он мог переключаться между различными случаями? Пример:

int w = 0;
switch(w)
{
   case 1:
     doSomething();
     w = 3;
   case 2:
     doSomething();
     break;
   case 3:
     doSomething();
     break;
}

По сути, я спрашиваю: если я не размещу оператор останова для случая и я изменяю значение переключателя в одном и том же случае, будет ли код выполнять оба случая?

Ответы [ 4 ]

3 голосов
/ 24 мая 2011

Да, вы можете изменить значение внутри переключателя, но он не будет выполнять регистр для нового значения, пока вы не прерветесь в случае, когда вы изменили значение.нет случая для 0. Но если вы измените на w = 1, то это будет для случая 1, а затем для случая 2, так как у вас нет перерыва;но это не пойдет на случай 3.

2 голосов
/ 24 мая 2011

Нет, он не изменится и не выполнит новую инструкцию case.

Помните, что как только соответствующее совпадение найдено с оператором case, соответствующим значению в операторе switch, этот конкретный случай выполняется и один раз, когда выполняется предоставляется после каждого случая, чтобы предотвратить падение во всех случаях), затем элемент управления возвращается к концу оператора switch.

Пример кода:

public  class A {
            public static void main(String [] args) {
                    int i=1;
                    switch(i) {
                            case 1 : 
                                    System.out.println("Case 1");
                                    i = 2;
                                    break;
                            case 2 : 
                                    System.out.println("Changed to Case 2");
                                    break;

                             default:
                                    System.out.println("Default");
                                    break;
                            }

                    System.out.println("Final value of i " + i);
            }
    }

Выход:

Case 1
Final value of i 2  

Примечание: Вставив правильные точки останова, попробуйте отладить. Вы сами узнаете, что именно происходит.

1 голос
/ 22 марта 2014

Если мы не дадим перерыв после каждого случая, тогда Java начнет выполнение оператора из соответствующего случая и продолжит выполнение операторов также для следующих случаев, пока не будет найден оператор break или не встретится конец оператора switch.

0 голосов
/ 24 мая 2011

Если case 1 выполнится, это просто падение до case 2.И поскольку в case 2 есть break, дальнейшее падение через не происходит.Он не переходит на case 3 из-за оператора w = 3 ; в case 1.

...