首页 > 解决方案 > 摆脱 MATLAB 中的多个 for 循环

问题描述

我有一个家庭作业练习,要求找到一个找到最小的 3 位数阿姆斯壮数的脚本。

我写了我的剧本。它可以很好地找到这些数字,但我不知道如何在第一个 Armstrong 数字上停下来。

这是我的代码

a=0;
b=0;
c=0;
for x1=1:1:9
    a=x1^3;
    for x2=0:1:9
        b=x2^3;
        for x3=0:1:9
            c=x3^3;
            d=(x1*100 + x2*10 + x3);
            if (a+b+c) == (d)
                disp(d)
            end
        end
    end
end

它通常打印153 370 371 407. 如果我breakdisp它只是从第一个而不是全部出来之后使用,然后打印153 370 407.

标签: matlab

解决方案


您可以使用关键字停止循环break。但是,这只会停止一个循环。你现在有选择

  1. 设置某种标志并在每个循环中检查它以终止(break)它(又名:正确的方法
  2. 使用return又名:讨厌的方式

选项1

a = 0;
b = 0;
c = 0;
FLAG_STOP = false;
for x1 = 1:9
    a = x1^3;
    for x2 = 0:9
        b = x2^3;
        for x3 = 0:9
            c = x3^3;
            d = (x1*100 + x2*10 + x3);
            if (a+b+c) == (d)
                disp(d)

                % set flag
                FLAG_STOP = true;
                break
            end
        end
        if FLAG_STOP
            break
        end
    end
    if FLAG_STOP
        break
    end
end

选项 2

一句警告

(...) 它不只是退出循环;它退出脚本或函数并将控制权返回给调用程序或命令提示符。

即之后的所有语句return都将被忽略——无论它们是否是循环的一部分

a = 0;
b = 0;
c = 0;
for x1 = 1:9
    a = x1^3;
    for x2 = 0:9
        b = x2^3;
        for x3 = 0:9
            c = x3^3;
            d = (x1*100 + x2*10 + x3);
            if (a+b+c) == (d)
                disp(d)

                return % <<<<<<<<<<<<
            end
        end
    end
end

推荐阅读