可以使用break来进行外循环?

时间:2013-05-27 09:10:48

标签: c# java

如果我像下面的代码那样使用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;
        }

13 个答案:

答案 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;
                }
            }
        }
    }
}