巢狀條件
當我們在另一個條件下使用條件時,我們說條件是巢狀的。 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
我們還應該注意兩件事:
end
在每個if
的正確位置的位置對於按預期工作的條件集是至關重要的,因此縮排不僅僅是一個好的推薦。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 是否是其中一個除數。