switch選擇語句:
switch語句一般情況下與if語句的效果是等效的,但是switch語句的執行速率比嵌套的if語句要快,switch語句不分單選/雙選/多選結構,它的結構取決於代碼的邏輯。
表達式:
switch (條件表達式) { case 1: //條件表達式執行完畢后,switch判斷該值是否為1,如果是1,則執行case1 以下的代碼 代碼塊1; break; case 2: //case1執行完畢后,會繼續判斷該值是否為2,如果是,同理執行case2以下的代碼 代碼塊2; break; default: //如果條件表達式執行完畢,且該值即不等於1也不等於2,則執行該代碼塊 代碼塊3; break; }
(注意:為了防止case穿透問題,一般在使用switch語句時都必須加上break(跳出),否則case下余的代碼也會被編譯執行,就毫無意義)
(注意:在JDK7之后的版本,switch語句還支持String類型,也就是說case后面的值不僅可以為數字,也可以為字符/字符串等。但是如果使用float與double會出現丟失精度的問題)
case穿透的理解:
當條件表達式計算完成后,程序開始執行,如果結果為1,則執行case1的代碼塊1。當代碼塊1執行完畢后,程序還會繼續執行case2的代碼塊2,直至執行完所有case。
一般寫程序時只有需要多選擇結構時才會經常用到switch語句,如果是單/雙選擇結構,一般用if語句即可。
示例:
①使用switch語句實現一個簡單的擲篩子小程序:
package exercise; /** * @author 劉小將 * switch語句:多選擇結構 * 一個簡單的擲色子小程序 */ public class TestSwitch { public static void main(String[] args) { double b = Math.random(); int e = 1+(int)(b*6); switch (e) { //switch()中默認是int型,或者自動轉為int的類型(byte,short,char),也可以是枚舉。JDK7版本后還支持字符串 case 6: System.out.println("恭喜您,您中了一等獎!"); break; //注意:如果此處不加break,則會發生case穿透,第一個case后面的代碼將會被全部執行編譯,所以必須加上。 case 5: System.out.println("恭喜您,您中了二等獎!"); break; case 4: System.out.println("恭喜您,您中了三等獎!"); break; default: System.out.println("很遺憾,您未中獎!"); break; } } }
②使用switch語句實現判斷26個拉丁字母的音素:
package exercise; /** * @author 劉小將 * switch語句:多選擇結構 * 判斷26個拉丁字母的因素 */ public class TestSwitch { public static void main(String[] args) { char a = 'a'; int rand = (int)(26*Math.random()); char a2 = (char)(a+rand); //強制轉型為char型 System.out.println(a2+":"); switch(a2) { case 'a': System.out.println("元音"); break; case 'e': System.out.println("元音"); break; case 'i': System.out.println("元音"); break; case 'o': System.out.println("元音"); break; case 'u': System.out.println("元音"); break; case 'w': System.out.println("半元音"); break; case 'y': System.out.println("半元音"); break; default: System.out.println("輔音"); break; } } }