2017-01-28 4 views
1

У меня есть код псевдокода с блоком переключателей с 4 случаями. В 4-м случае у меня есть условия else, и когда какое-то условие удовлетворяет, я уменьшаю размер списка на 1, и он должен снова вернуться к случаю 4 и выполнить с начала 4-го случая. Я попытался создать ярлык в случае 4: но он дает ошибку компиляции.Можем ли мы иметь ярлык внутри корпуса коммутатора java

switch(choice) { 

case 1: /* do operations */ 
      break; 
case 2: /* do operations */ 
      break; 
case 3: /* do operations */ 
      break; 
case 4: 
     mylabel: 
     if(condition1) { 

     } 
     else if(condition2) { 

     } 
     else { 
     break mylabel; 
     } 
     break; 
default : 
} 

Выше кода дается ошибка компиляции. Но я хочу, чтобы поток программы был чем-то вроде этого. Поэтому я пробовал под кодом:

switch(choice) { 

case 1: /* do operations */ 
      break; 
case 2: /* do operations */ 
      break; 
case 3: /* do operations */ 
      break; 
case 4: 
     if(condition1) { 

     } 
     else if(condition2) { 

     } 
     else { 
     break case 4; 
     } 
     break; 
    default : 
    } 

С приведенным выше кодом все еще есть проблемы с компиляцией. Есть ли альтернатива для достижения того же. Здесь мне нужно вернуться к началу того же оператора case, из которого я сломаюсь. Следовательно, это другое.

+2

Я ожидаю, что вам просто нужно обернуть свой код «case 4» в цикле 'do {...} while (cond)'. – AJNeufeld

ответ

1

использование этикетки и время цикла. он будет работать

switch (choice) { 
    case 1: /* do operations */ 
     break; 
    case 2: /* do operations */ 
     break; 
    case 3: /* do operations */ 
     break; 
    case 4: 
     mylabel:{ 
      while(true){ 
        if(condition1) { 

        }else if(condition2) { 

        }else { 
         break mylabel;// breaks the while-loop 
        } 
      } 
     } 
    default: 
     break; 
    } 
+0

Я смог вернуться к этикетке с этим решением. Но я сделал это без петли внутри метки. Спасибо –

+0

ok приветствую вас, вы также можете обойтись без цикла –

0

Проверить эту ссылку из: Break label in switch

+1

вы можете либо пометить вопрос как дубликат, либо поделиться содержимым со ссылкой для текущего варианта использования. – nullpointer

0
public void switchFunction(String choice){ 
     switch(choice) { 
     case 1: 
      do1(); 
      break; 
     case 2: /* do operations */ 
      break; 
     case 3: /* do operations */ 
      break; 
     case 4: 
      recursiveFunction(); 
      break; 
     default : 
     } 
    } 

    public void recursiveFunction(){ 
     if(condition1){ 
     doSomething(); 
     } 
     else if(condition2){ 
     doSomethingElse(); 
    } 
    else{ 
    /* You can call it as much as you want! */ 
    recursiveFunction(); 

}}

Смежные вопросы