2013-04-03 73 views
0

我有代码大致是这样的:break语句不工作

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 

当程序进入if语句,其中someCondition是真实的它打印

Entered 

,然后它似乎打破从这两个for循环成功,因为它下次打印

After Loop 

然后!在控制台打印

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

这怎么可能。方法A从多于一个地方递归地调用,但是,如果因为该方法以递归方式再次开始而下一次打印“内部循环底部”的原因,则它不会首先打印“内部循环底部”!但是“Before loop”和“Outer loop top”,然后会打印“Inner loop top”和THEN“inner loop bottom”。根据打印语句,它从两个循环中断开,然后跳回到内循环的底部,并继续在内循环中循环。到底是怎么回事。请帮忙!谢谢

回答

0

使用没有标签的break会破坏当前正在执行的最内层循环。

使用带有标签foo的break会打破标有foo的语句。

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

break语句包括一个可选的标签,允许在程序打出来的标记声明。 break语句需要嵌套在这个标签语句中。带标签的语句可以是任何块语句;它不必以循环语句开头。

Credits:what the difference between break with label and without label in javascript

+0

感谢您的回复。好吧,我的break语句嵌套在标签语句中,很明显,通过打破外部循环我也打破了内部循环,所以你提出的是错误的?我试过使用没有标签的break语句从内部循环中断开,然后使用someCondition = true变量从外部循环中断开。并打印出“After loop”,这意味着它的工作,但它然后再次打印“内循环底部”。 :/ – user2240342

+0

那么这似乎有点依赖于机器..因为在我的电脑相同的程序给出了类似的,但在其他顺序输出..尝试更换标签的位置或打破没有标签。但是,恐怕没有标签的打破只会导致内循环突破。类似的事情可以在外部循环完成.. –

+0

我试过了,(请参阅我以前的评论),它以相同的方式响应:/ – user2240342