巢狀條件

當我們在另一個條件下使用條件時,我們說條件是巢狀的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 是否是其中一個除數。