10/09/2006

3.6 SWITCH條件式

與前面之if-else-end 敘述相同的條件式,有時亦可利用switch 之敘述方式,使結構更條理化。switch 之陳述型式如下:

  
switch switch_expr
case case_expr,
statement, ..., statement
case {case_expr1, case_expr2, case_expr3,...}
statement, ..., statement
...
otherwise,
statement, ..., statement
end


在這裡只要第一個 CASE 的條件相符合時,其後之敘述指令即會被執行。若CASE 之條件是以數個單元之集合表示(如第二個CASE),則只要其中一單元符合SWITCH後之條件,即會執行第二CASE下之指令陳述。若所有條件均不符合,則會執行OTHERWISE後之指令陳述。不論如何,僅其中一個CASE的內容會被執行,執行後即會跳到 END後面之敘述去執行下一段之指令。這種方式可以說是最結構化之條件式,也最常用。

在沒離開這個題目之前,仍有幾句話附帶說明,在SWITCH後面之敘述switch_expr,可以為常數或字串。故只要switch_expr==case_expr 為真,則該CASE下之陳述會被執行。

下面為利用前面if的例子draw_number程式改寫為switch case之應用:

function [C]=draw_number2(no_of_draw)
% draw ball numbers within ndraw times
% Using switch case
C=zeros(1,5);
n=1;
while n<=no_of_draw
ball=fix(rand*10);
switch ball
case {0,1}
C(1)=C(1)+1;
case {2,3}
C(2)=C(2)+1;
case {4,5}
C(3)=C(3)+1;
case {6,7}
C(4)=C(4)+1;
otherwise
C(5)=C(5)+1;
end
n=n+1;
end


執行結果:

>>draw_number2(1000)
ans =
186 197 211 199 207

>>draw_number2(5000)
ans =
1017 1028 934 999 1022

>>draw_number2(10000)

ans =
2014 2021 1908 2036 2021

執行結果大致相同。switch case比較適合列舉型選項,if指令則可適用於各種範圍的選擇,其應用均很廣泛。