我正在查看TimSort java代码:Original Source 特别是mergeLo函数的第676到739行。它(大致)有以下布局:
outer:
while (true) {
//Code here
break outer; //Code within a few if tests in the loop.
}
//Code here executes somehow.
我对此函数如何停止运行感到困惑,因为唯一的break语句转到外部块(然后应该回到while(true),并且没有返回语句。
我的问题是,当我尝试对184个或更多元素进行排序时,第747行正在执行并抛出异常,我想弄清楚如何修复它,任何帮助都将不胜感激。
[注意]:这是部署在Android手机上的Java集合调用函数。
答案 0 :(得分:7)
标签'outer'只是while循环的别名。也就是说,break语句打破了循环,控制流在循环之后继续。
相反,继续外部将返回到while循环的顶部。
答案 1 :(得分:1)
outer
实际上标记了while
循环,而不是它之前的行,因此它在破坏后不会重新进入...它不是goto
。 =)
答案 2 :(得分:0)
break outer;
会让您离开while(true)
循环。它不会回到循环中。您是否将break
与continue
混淆了?
答案 3 :(得分:0)
你应该看一下syntax of break
statements。
我认为您将break
语句视为goto
语句。他们是两个不同的东西。带有包含标签的break语句突破了标签指向的语句。
该链接应该有用。