是否有任何语言允许突破多个循环?
Is there any language that allows a break through multiple loops?
break
在大多数语言中中断 for 循环,但在嵌套循环的情况下,我从未遇到过 n-th 顺序中断。
1. 任何语言都有这样的东西吗?
2. 如果是,正确的名称是什么?
3. 如果不是,为什么?
注意。我不是在寻找解决方法。
关于第 3 点。我知道的最接近的是 goto
,不应使用它,因为它会导致意大利面条代码(Python 仅在笑话模块中有),但这似乎就像一个不同的问题,作为一个布尔变量来标记一个内部中断,捕获一个引发的自定义错误或将块移动到一个函数以便用 return 中断要复杂得多(就行号和变量而言在代码中)。
(从理论的角度来看,这是一个好奇的问题,但如果有帮助,我主要在Python,Matlab和JS中进行编码。我知道Perl,Pascal和Basic ,但我只知道 C++ 的基础知识,对机器代码知之甚少。)
Java 有一个 标记的 break 语句,可以让你跳出任意数量的循环:
search:
for (i = 0; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length;
j++) {
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
break search; // <<=== This statement breaks both nested loops
}
}
}
我不知道有什么语言可以让你做到这一点(除了@dasblinkenlight 的例子 - 并不是说没有)但是你可以用任何具有 break
声明。
即布尔退出循环 var.
条件中断
var exitLoops = false;
for (var i = 0; i < x; i++) {
for (var j = 0; j < y; j++) {
for (var k = 0; k < z; k++) {
if (something) {
exitLoops = true;
break;
}
}
if (exitLoops) break;
}
if (exitLoops) break;
}
没有(据我所知)。为什么?因为如果你需要一次退出多个嵌套的 for 循环,那么你就会遇到代码设计问题,而不是语法问题。上面给出的所有答案,除了@PinkTurtle,都使用了某种不推荐的 goto 语句。
在JavaScript中你可以这样做
复制粘贴以下 Chrome 开发控制台,
free:
for(var i=0; i<10; i++) {
for(var j=0; j<10; j++) {
for(var k=0;k<10;k++){
console.log('I am at i='+i+' , j='+j+ ' , k='+k);
if(k==3) {
console.log('I will now break FREE...');
break free;
}
}
}
}
console.log('... And Now I am Here...')
输出
I am at i=0 , j=0 , k=0
I am at i=0 , j=0 , k=1
I am at i=0 , j=0 , k=2
I am at i=0 , j=0 , k=3
I will now break FREE...
... And Now I am Here...
break
在大多数语言中中断 for 循环,但在嵌套循环的情况下,我从未遇到过 n-th 顺序中断。
1. 任何语言都有这样的东西吗?
2. 如果是,正确的名称是什么?
3. 如果不是,为什么?
注意。我不是在寻找解决方法。
关于第 3 点。我知道的最接近的是 goto
,不应使用它,因为它会导致意大利面条代码(Python 仅在笑话模块中有),但这似乎就像一个不同的问题,作为一个布尔变量来标记一个内部中断,捕获一个引发的自定义错误或将块移动到一个函数以便用 return 中断要复杂得多(就行号和变量而言在代码中)。
(从理论的角度来看,这是一个好奇的问题,但如果有帮助,我主要在Python,Matlab和JS中进行编码。我知道Perl,Pascal和Basic ,但我只知道 C++ 的基础知识,对机器代码知之甚少。)
Java 有一个 标记的 break 语句,可以让你跳出任意数量的循环:
search:
for (i = 0; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length;
j++) {
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
break search; // <<=== This statement breaks both nested loops
}
}
}
我不知道有什么语言可以让你做到这一点(除了@dasblinkenlight 的例子 - 并不是说没有)但是你可以用任何具有 break
声明。
即布尔退出循环 var.
条件中断var exitLoops = false;
for (var i = 0; i < x; i++) {
for (var j = 0; j < y; j++) {
for (var k = 0; k < z; k++) {
if (something) {
exitLoops = true;
break;
}
}
if (exitLoops) break;
}
if (exitLoops) break;
}
没有(据我所知)。为什么?因为如果你需要一次退出多个嵌套的 for 循环,那么你就会遇到代码设计问题,而不是语法问题。上面给出的所有答案,除了@PinkTurtle,都使用了某种不推荐的 goto 语句。
在JavaScript中你可以这样做
复制粘贴以下 Chrome 开发控制台,
free:
for(var i=0; i<10; i++) {
for(var j=0; j<10; j++) {
for(var k=0;k<10;k++){
console.log('I am at i='+i+' , j='+j+ ' , k='+k);
if(k==3) {
console.log('I will now break FREE...');
break free;
}
}
}
}
console.log('... And Now I am Here...')
输出
I am at i=0 , j=0 , k=0
I am at i=0 , j=0 , k=1
I am at i=0 , j=0 , k=2
I am at i=0 , j=0 , k=3
I will now break FREE...
... And Now I am Here...