如果我像下面的代码那样使用break
,那么row
中的循环如果在开头有匹配则不会迭代其余的循环,但是col
循环怎么办? ?
它还会在0到7之间迭代吗?有没有办法在那里使用break
?
for (int col = 0; col < 8; col ++)
for (int row = 0; row < 8; row ++)
if (check something)
{
//Then do this;
break;
}
答案 0 :(得分:87)
一种选择是使用条件标志。然后,您可以 在外部循环中断,或者只是将其用作for
循环中的额外条件:
bool keepGoing = true;
for (int col = 0; col < 8 && keepGoing; col++)
{
for (int row = 0; row < 8 && keepGoing; row++)
{
if (something)
{
// Do whatever
keepGoing = false;
}
}
}
在Java中,您可以指定要破解的标签。 (我没有看到这个问题被标记为Java以及C#。)
outerLoop:
for (...)
{
for (...)
{
if (...)
{
break outerLoop;
}
}
}
编辑:正如评论中所述,在C#中你可以使用标签和goto
:
for (...)
{
for (...)
{
if (...)
{
goto endOfLoop;
}
}
}
endOfLoop:
// Other code
我确实建议你不要采取这些方法中的任何一种。
在两种语言中,通常最好只将两个循环转换为单个方法 - 然后您可以从方法返回:
public void doSomethingToFirstOccurrence()
{
for (...)
{
for (...)
{
if (...)
{
return;
}
}
}
}
答案 1 :(得分:14)
是的,可以使用break
标签:
package others;
public class A {
public static void main(String[] args) {
outer: for(int col = 0; col < 8; col ++)
{
for (int row = 0; row < 8; row ++)
{
if (col == 4)
{
System.out.println("hi");
break outer;
}
}
}
}
}
答案 2 :(得分:5)
您可以像这样输入逻辑:
boolean condition = false;
for (int col = 0; col < 8; col ++)
for (int row = 0; row < 8; row ++)
if (check something) {
// Then do this:
condition = true; // Break condition for outer loop
break;
}
}
if (condition)
break;
}
答案 3 :(得分:3)
它不会退出col循环。
相反,您可以将所有函数包装在一个函数中并使用return;
立即从循环中退出
private Xy Loop( /* Parameters */)
for (int col = 0; col < 8; col ++)
for (int row = 0; row < 8; row ++)
if (check something) {
// Then do this;
return something; //Or just return;
}
}
}
}
答案 4 :(得分:3)
break
只会打破直接围绕它的循环。您可以使用标志来控制外部循环:
boolean continueOuterLoop = true;
for(int col = 0; continueOuterLoop && col < 8; col ++) {
for(int row = 0; row < 8; row ++) {
if(check something) {
//Then do this;
continueOuterLoop = false;
break;
}
}
}
答案 5 :(得分:3)
nameHere:
for (yourForLoop) {
for (anotherLoop) {
if(condition) {
break nameHere;
}
}
}
答案 6 :(得分:1)
我认为您应该使用标签或标签,例如“outerLoop”。这适用于Java:
outerLoop:
for (int col = 0; col < 8; col ++)
for (int row = 0; row < 8; row ++)
if (check something)
{
//Then do this;
break outerLoop;
}
答案 7 :(得分:1)
其他答案的另一个替代方法是将计数器设置为最大值,以停止循环。
for (int col = 0; col < 8; col ++)
for (int row = 0; row < 8; row ++)
if (check something)
{
// Use the col and row here.
// Now we go for a totally break of all loops.
// To stop the loops you can set that to the maximum
// of your loop test.
row = 8;
col = 8;
}
这个技巧的优点是你不会在完整的循环中添加任何额外的检查代码,这会使它更快。
答案 8 :(得分:1)
在Java中,您可以使用break label
outer:
for (int col = 0; col < 8; col ++)
for (int row = 0; row < 8; row ++)
if (check something)
{
break outer;
}
}
}
而且,由于还没有人提及它,在C#中你可以使用goto label
for (int col = 0; col < 8; col ++)
for (int row = 0; row < 8; row ++)
if (check something)
{
goto outside;
}
}
}
outside:
答案 9 :(得分:0)
有几种方法可以做到这一点。一种方法是在外循环中设置变量的最大值。
int maxcol = 8;
for (int col = 0; col < maxcol; col++)
{
for (int row = 0; row < 8; row++)
{
if (check something)
{
Then do this;
// cause the outer loop to break:
col = maxcol;
// break the inner loop
break;
}
}
}
答案 10 :(得分:0)
设置col = 8然后断开到内循环。
答案 11 :(得分:0)
Loop1:
for (int col = 0; col < 8; col ++)
{
for (int row = 0; row < 8; row ++)
{
if (condition)
{
break Loop1;
}
}
}
这可以做你需要的......
答案 12 :(得分:-1)
我们可以使用标志变量的概念:
flag = 1;
for (int col = 0; col < 8; col ++)
{
if (flag == 1)
{
for (int row = 0; row < 8; row ++)
{
if (flag == 1)
{
if (check something)
{
//Then do this;
flag = 0;
}
}
}
}
}