1,格式
switch(表達式){
case 常量1:執行語句1;
case 常量1:執行語句1;
... ...
case 常量n:執行語句n;
default:執行語句;}
2,說明:
- 根據switch表達式中的值,依次匹配各個case中的常量。一旦匹配成功,則進入相應case結構中,調用其執行語句。當調用完執行語句以后,則仍然繼續向下執行其他case結構中的執行語句,直到遇到break關鍵字或此switch-case結構的末尾處;
- break,可以使用在switch-case結構中,表示一旦執行到此關鍵字,就跳出switch-case結構;
- switch結構中的表達式,只能是如下的6種類型之一:byte short char int 枚舉類型(JDK 5.0新增),string類型(jdk7.0新增)
- case之后只能聲明常量,禁止寫范圍
- break關鍵字是可選的
- default相當於IF-ELSE結構中的 else;default結構是可選的;位置是可選的,但一般寫最后;
3.練習
練習一:使用switch把小寫類型的char轉換為大寫,只轉換啊a,b,c,d,e,其他的輸出為other;
1 import java.util.Scanner; 2 3 public class SwitchTest1 { 4 public static void main (String args[]) { 5 System.out.println("請輸入一個字符:"); 6 Scanner scan=new Scanner(System.in); 7 String intput = scan.next(); 8 char c=intput.charAt(0); 9 switch(c){ 10 case('a'): 11 System.out.println('A'); 12 break; 13 case('b'): 14 System.out.println('B'); 15 break; 16 case('c'): 17 System.out.println('C'); 18 break; 19 case('d'): 20 System.out.println('D'); 21 break; 22 case('e'): 23 System.out.println('E'); 24 break; 25 default:System.out.println("other"); 26 27 } 28 29 } 30
運行結果:
練習二:對學生成績大於60分的,輸出合格,低於60分的,輸出不合格;
1 import java.util.Scanner; 2 3 public class switchTest2 { 4 public static void main(String args[]) { 5 System.out.println("請輸入你的成績:"); 6 Scanner grade=new Scanner(System.in); 7 int grade1=grade.nextInt(); 8 switch(grade1/60) { 9 case(0): 10 System.out.println("不合格"); 11 break; 12 case(1): 13 System.out.println("合格"); 14 break; 15 } 16 } 17 18 }
運行結果:
切記switch變量不能使用范圍,而當情況種數較多時,一一列出顯然不必,switch結構具有多個case可以合並的性質。
一開始想到的是將變量寫為grade1/10,case0-5輸出為不合格,case6-10輸出為合格;如圖所示:
但顯然沒有除以60高效,所以做出修改;
練習三:從鍵盤分別輸入年月日,判斷這一天是當年的第幾天?
注:判斷一年是不是閏年的標准:①可以被4整除,但不能被100整除;或②可以被400整除;
1 import java.util.Scanner; 2 3 /* 4 從鍵盤分別輸入年月日,判斷這一天是當年的第幾天? 5 6 注:判斷一年是不是閏年的標准:①可以被4整除,但不能被100整除;或②可以被400整除; 7 */ 8 public class SwitchExer { 9 public static void main(String args[]) { 10 Scanner scan=new Scanner(System.in); 11 System.out.println("請輸入年份:"); 12 int year=scan.nextInt(); 13 System.out.println("請輸入月份:"); 14 int month=scan.nextInt(); 15 System.out.println("請輸入天數:"); 16 int day=scan.nextInt(); 17 int sumdays=0; 18 switch(month) { 19 case 12: 20 sumdays +=30; 21 case 11: 22 sumdays +=31; 23 case 10: 24 sumdays +=30; 25 case 9: 26 sumdays +=31; 27 case 8: 28 sumdays +=31; 29 case 7: 30 sumdays +=30; 31 case 6: 32 sumdays +=31; 33 case 5: 34 sumdays +=30; 35 case 4: 36 sumdays +=31; 37 case 3://判斷是不是閏年 38 if((year%4==0 && year%100!=0) || year%400==0) { 39 sumdays +=29; 40 }else sumdays+=28; 41 case 2: 42 sumdays +=31; 43 case 1: 44 sumdays += day; 45 default:System.out.println("輸入有誤,請重新輸入:"); 46 } 47 System.out.println(year+"年"+month+"月"+day+"日是當年的第"+sumdays+"天"); 48 } 49 }
運行結果:
4,兩個分支結構的使用選擇策略:
凡是可以使用switch—case 都可以使用If-else,反之,不成立;
如果兩者都可以使用(switch中表達式的取值情況不太多時),優先選擇switch-case結構;原因:switch-case執行效率稍高;