2013-04-03 6 views
0

У меня есть код, который примерно выглядит следующим образом:заявление перерыв не работает

START 
Recursive method A 
    print("Before Loop") 
    loop: 
    for(Object o: list) 
    { 
      print("Outer loop top") 
     for(Object ob: list2) 
     { 
       print("Inner loop top") 
      //do stuff with o & ob e.g. recursively call method A under certain conditions 
      if(someCondition true) 
      { 
       print("Entered") 
      break loop; 
      } 
       print("Inner loop bottom") 
     } 
      print("Outer loop bottom") 
    } 

print("After Loop") 

END 

Когда программа входит, если заявление, где someCondition правда печатает

Entered 

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

After Loop 

И ТОГДА !! в консоли он печатает

inner loop bottom 
Outer Loop bottom 
Outer loop top 
inner loop top 
etc. 

Как это возможно. метод A называется рекурсивно из более чем 1-го места, НО, если впоследствии была напечатана причина «нижняя внутренняя петля», потому что метод рекурсивно начинался снова, он сначала не печатал нижнее нижнее «нижнее»! но «Перед циклом», а затем «Верхняя верхняя петля», затем будет напечатана «Верхняя часть внутреннего петли» и THEN «Внутреннее дно петли». Согласно заявлениям печати, они ломаются от обеих петель, а затем возвращаются в нижнюю часть внутреннего цикла и продолжают циклически проходить через внутренний цикл. Что происходит. Пожалуйста помоги! Спасибо

ответ

0

Использование разрыва без метки разбивает самый внутренний цикл, который в настоящее время выполняется.

Использование break с меткой foo нарушает инструкцию с надписью foo.

https://developer.mozilla.org/en/JavaScript/Reference/Statements/break

Оператор перерыва включает дополнительную метку, которая позволяет программе прерывать помеченный оператор. Оператор break должен быть вложен в этот помеченный оператор. Обозначенный оператор может быть любым заявлением блока; ему не обязательно должен предшествовать оператор цикла.

Кредиты: what the difference between break with label and without label in javascript

+0

спасибо за ответ ур. хорошо, мои инструкции break вложены в помеченный оператор, очевидно, нарушая внешний цикл, я тоже нарушаю внутренний цикл, так что вы предлагаете неправильно? Я попытался использовать оператор break без ярлыка, чтобы выйти из внутреннего цикла, а затем переменную someCondition = true, чтобы выйти из внешнего цикла. и он печатает «После цикла», что означает, что он сработал, но затем снова печатает «внутреннее нижнее дно». :/ – user2240342

+0

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

+0

Я пробовал это (см. мой предыдущий комментарий), и он отвечает так же: / – user2240342

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