Почему я не могу использовать «continue» внутри оператора switch в Java? - PullRequest
5 голосов
/ 26 марта 2010

Почему следующий код:

class swi  
{
    public static void main(String[] args)  
    {  
        int a=98;
        switch(a)
        {
            default:{ System.out.println("default");continue;}
            case 'b':{ System.out.println(a); continue;}
            case 'a':{ System.out.println(a);}
        }
        System.out.println("Switch Completed");
    }
}

выдает ошибку:

продолжить вне цикла

Ответы [ 7 ]

17 голосов
/ 26 марта 2010

Отклонение является стандартным поведением для оператора switch, и поэтому использование продолжения в операторе switch не имеет смысла.Оператор continue используется только в циклах for / while / do.. while.

Исходя из моего понимания ваших намерений, вы, вероятно, захотите написать:

System.out.println("default");
if ( (a == 'a') || (a == 'b') ){
    System.out.println(a);
}

Я также предложилчто вы помещаете условие по умолчанию в самый конец.

РЕДАКТИРОВАТЬ: не совсем верно, что операторы continue не могут использоваться внутри операторов switch.(Идеально помеченное) continue утверждение полностью допустимо.Например:

public class Main {
public static void main(String[] args) {
    loop:
    for (int i=0; i<10; i++) {
        switch (i) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 9:
            continue loop;
        }

        System.out.println(i);
    }
}
}

Будет получен следующий вывод: 0 2 4 6 8

8 голосов
/ 26 марта 2010

continue -Statement может использоваться в циклах, а не в переключателе. То, что вы, вероятно, хотите, это break.

6 голосов
/ 26 марта 2010

Потому что у вас есть continue вне цикла. continue - для возврата к началу цикла, но в этом коде нет цикла. Чтобы вырваться из блока switch, вам нужно ключевое слово break (см. Ниже).

Также нет необходимости помещать каждый блок case в фигурные скобки (если вы не хотите, чтобы внутри них находились переменные локальной области).

Так что-то вроде этого будет более стандартным:

class swi22
{
    public static void main(String[] args)
    {
        int a=98;
        switch(a)
        {
            default:
                System.out.println("default");
                break;
            case 'b':
                System.out.println(a);
                break;
            case 'a':
                System.out.println(a);
                break;
        }
        System.out.println("Switch Completed");
    }
}

Есть также школа мысли, которая говорит, что условие default всегда должно быть в конце. Это , а не требование, просто довольно распространенное соглашение.

2 голосов
/ 26 марта 2010

continue внутри переключателя ?? !!! только break может храниться внутри переключателя.!

код должен быть,

class swi22  
{
     public static void main(String[] args)  
     {  
         int a=98;
         switch(a)
         {
             default:{ System.out.println("default");break;}
             case 'b':{ System.out.println(a); break;}
             case 'a':{ System.out.println(a);}
          }
          System.out.println("Switch Completed");
     }
}
0 голосов
/ 26 марта 2010

continue просто переходит непосредственно к следующей итерации цикла.

break используется для выхода из контуров и выключателей.

Используйте break; вместо continue;

Продолжение:

for(x = 0; x < 10; x++)
{
   if(x == 3)
     continue;
   else       
     DoIterativeWork();       
}

Переключатель:

switch(a)
{
 default:{ System.out.println("default"); break;}
 case 'b':{ System.out.println(a); break;}
 case 'a':{ System.out.println(a);}
}
0 голосов
/ 26 марта 2010

Вы используете continue там, где вы должны использовать break

0 голосов
/ 26 марта 2010

Разве вы не должны использовать break вместо continue?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...