可以使用中断进行外循环吗?

2022-09-01 07:05:36

如果我像下面的代码一样使用,那么如果开始时有匹配项,那么里面的循环就不会迭代其余部分,但是循环呢?breakrowcol

它是否仍会在 0 和 7 之间迭代?有没有办法在那里使用?break

for (int col = 0; col < 8; col ++)
    for (int row = 0; row < 8; row ++)
        if (check something)
        {
            //Then do this;
            break;
        }

答案 1

一种选择是使用条件标志。然后,您也可以在外部循环中中断,或者只是将其用作循环中的额外条件: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;
            }
        }
    }
}

答案 2

是的,可以使用标签: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;
                }
            }
        }
    }
}

推荐