嵌套条件

当我们在另一个条件下使用条件时,我们说条件是嵌套的elseif 选项给出了嵌套条件的一个特例,但是还有许多其他方法可以使用嵌套条件。我们来看看以下代码:

a = 2;
if mod(a,2)==0    % MOD - modulo operation, return the remainder after division of 'a' by 2
    disp('a is even')
    if mod(a,3)==0
        disp('3 is a divisor of a')
        if mod(a,5)==0
            disp('5 is a divisor of a')
        end
    end
else
    disp('a is odd')
end 

对于 a=2,输出将是 a is even,这是正确的。对于 a=3,输出将是 a is odd,这也是正确的,但如果 3 是 a 的除数则错过了检查。这是因为条件是嵌套的,所以只有当第一个是 true 时,才会移动到内部条件,如果 a 是奇数,则甚至都不检查内部条件。这与 elseif 的使用有些相反,其中只有第一个条件是 false 而不是我们检查下一个条件。那么用 5 来检查除法怎么样?只有 6 作为除数(2 和 3)的数字将被检查除以 5,我们可以测试并看到 a=30 的输出是:

a is even
3 is a divisor of a
5 is a divisor of a

我们还应该注意两件事:

  1. end 在每个 if 的正确位置的位置对于按预期工作的条件集是至关重要的,因此缩进不仅仅是一个好的推荐。
  2. else 语句的位置也是至关重要的,因为我们需要知道在 false 中我们想要做什么的 if(以及可能有几个)。

让我们看另一个例子:

for a = 5:10    % the FOR loop execute all the code within it for every a from 5 to 10
    ch = num2str(a);    % NUM2STR converts the integer a to a character
    if mod(a,2)==0
        if mod(a,3)==0
            disp(['3 is a divisor of ' ch])
        elseif  mod(a,4)==0
            disp(['4 is a divisor of ' ch])
        else
            disp([ch ' is even'])
        end
    elseif mod(a,3)==0
        disp(['3 is a divisor of ' ch])
        
    else
        disp([ch ' is odd'])
    end
end

输出将是:

5 is odd
3 is a divisor of 6
7 is odd
4 is a divisor of 8
3 is a divisor of 9
10 is even

我们看到 6 个数字只有 6 行,因为条件嵌套的方式确保每个数字只有一个打印,并且(虽然不能直接从输出中看到)没有进行额外的检查,所以如果一个数字甚至没有必要检查 4 是否是其中一个除数。