如何在matlab中退出两个嵌套的for循环

时间:2013-11-30 16:38:53

标签: matlab loops

我有一个while循环,其中有两个for循环。我在最里面的for循环中有一个条件。只要满足该条件,我想退出两个for循环并继续while循环:

while (1)
    for x=1:20
        for y=1:30
            if(condition)

            end
        end
    end
end

Matlab在Java中是否有像带标签的语句,还是有其他方法可以做到这一点?

7 个答案:

答案 0 :(得分:6)

一个比路易斯·门多更优雅的方式。 ; - )

while (1)
    for x=1:20
        for y=1:30
            quit = (condition);
            if quit
                break;
            end
        end
        if quit
            break;
        end
    end
end

答案 1 :(得分:4)

只有稍微比A.Donda的答案更优雅(避免两次测试条件):

while 1
    for x=1:20
        for y=1:30
            quit = 0;
            if (condition)
                quit = 1;
                break;
            end
        end
        if quit
            break;
        end
    end
end

答案 2 :(得分:4)

这是一个非常简单的答案,它利用了测试众多简单条件的事实几乎是免费的:

while (1)
    go = true;
    for x=1:20
        for y=1:30
            if go && condition
               go = false;

            end
        end
    end
end

这种方法非常简单,可以很容易地推广到任意数量的循环,并避免滥用错误处理。

答案 3 :(得分:2)

有点滥用,有点矫枉过正,但这是:还有另一种方式

while (1)
    try
        for x = 1 : 20
            for y = 1 : 30
                assert(~(condition), 'break')
            end
        end
    catch err
        if ~strcmp(err.message, 'break'), rethrow(err), end
    end
end

这种方法的好处是它可以使用任意数量的嵌套循环,并且只需评估condition一次,而不必将结果存储在变量中。

受到tmpearce评论的启发。

答案 4 :(得分:1)

我只知道一种非常不优雅的方法:检查条件两次。

while (1)
    for x=1:20
        for y=1:30
            if (condition)
                break;
            end
        end
        if (condition)
            break;
        end
    end
end

答案 5 :(得分:1)

另一种可能性,它避免使用两个break语句:如果你在外部for循环中没有做任何事情,除了调用内部for循环,你可以合并它们: / p>

[yy xx] = ndgrid(1:20,1:30);
while 1
    for n = 1:numel(x)
        x = xx(n);
        y = yy(n);
        if (condition)
            break      
        end
    end
end

答案 6 :(得分:0)

立即退出for for循环并继续while while循环。

while (1)
    go=1 %

    for x=1:20
        if go==0;break; %

        for y=1:30
            if(condition)
                go=0;break; %
            end
        end
    end
end