1. 程式人生 > 其它 >選擇結構之——switch語句

選擇結構之——switch語句

switch語句

結構

switch(表示式){
         case 常量1:
                 語句1;break;
         case 常量2:
                 語句2;break;
         ...
         default:         
                 語句n;
}

執行原理:
程式由上到下執行,首先執行小括號中的表示式,得出一個常量值,然後再執行後續的case語句,如果表示式中的常量值與某個case語句中的常量的值匹配上了即兩個常量值相等。那麼就會執行對應case後面的語句,遇到break語句後就跳出整個switch結構,這時候switch結構就會終止執行;如果表示式中的常量值與任何一個case後面常量的值都匹配不上,那麼程式就會執行default語句中的語句。

switch語句中可以省略break,不過這樣switch語句就會一直執行到最後一條語句。
也可以省略default語句如果表示式中的常量值與任何一個case後面常量的值都匹配不上並且程式中沒有編寫default語句那麼switch語句就會終止執行。
在JDK6.0以前(包括JDK6.0)switch後面的表示式的計算結果只允許是int或者與int等價的資料型別(byte、short、int、char),但是在JDK7.0以後表示式的值也可以是String型別。

【例題1】
下列語句執行後,z的值為?(選擇一項)

int x=3,y=4,z=0;
switch(x%y+2){
case 0 : 
	z=
x*y; break; case 6 : z=x/y; break; case 12 : z=x-y; break; default : z=x*y-x; }

A:15
B:0
C:-2
D:9

解析:本題考查switch結構,x%y+2的值為5,沒有匹配的case語句,故執行default語句,z=xy-x=34-3=9

【例題2】
下列語句序列執行後,r的值是?(選擇一項)

char ch='8';
int r=10;
switch(ch+1){
case '7' : 
	r=r+3;
case '8' :
	r=r+5;
case '9' :
	r=r+6;
break;
default
: r=r+8 }

A:13
B:15
C:16
D:18

解析:本題考查switch結構,關鍵點在於switch後面表示式值的計算,字元char在與int型別的資料進行計算的時候會自動轉換為int型別
表示式ch+1其實就是 ‘8’+1 = 56+1=57,後續的多個case中只有’9’的轉換為int型別後的值為57能與之相匹配上,所以會執行r=r+6得出r=16
當想要知道char型別的資料例如:'9’轉換成int型別的值為多少時可以使用程式碼測試

char ch = '9';
System.out.println(ch+0);//最終的計算結果確實為57

【例題3】下列語句序列執行後,k 的值是? (選擇一項)

int x=6,y=10,k=5;
switch(x%y){
case 0:
	k=x*y;
case 6:
	k=x/y;
case 12:
	k=x-y;
default :
	k=x*y-x;
}

A:60
B:5
C:0
D:54

解析:本題考查switch結構,x%y的值為6,執行case 6,k=6/10=0,沒有結束語句,繼續執行case12,k=x-y=-4,沒有結束語句,繼續執行default語句,k=x*y-x=60-6=54。故k的值為54,D選項正確。

【案例1】:
從鍵盤輸入1-7之間的任意數字,分別輸出對應的資訊
1——星期一
2——星期二
3——星期三
4——星期四
5——星期五
6——星期六
7——星期日

package com.jinglan.select;

import java.util.Scanner;

public class Exercise_Switch {
	public static void main(String[] args) {
		System.out.println("請輸入1-7之間的任意一個數字:");
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		switch (num) {
		case 1:
			System.out.println("星期一");
			break;
		case 2:
			System.out.println("星期二");
			break;
		case 3:
			System.out.println("星期三");
			break;
		case 4:
			System.out.println("星期四");
			break;
		case 5:
			System.out.println("星期五");
			break;
		case 6:
			System.out.println("星期六");
			break;
		case 7:
			System.out.println("星期日");
			break;

		default:
			System.out.println("該數字超出了1-7的範圍!");
		}

	}

}

執行結果
在這裡插入圖片描述

【案例2】
與【案例1】做一個類似比較體會一下,順便認識兩個方法toUpperCase()將字串全部轉換為大寫和toLowerCase()將字串全部轉換為小寫

package com.jinglan.select;

import java.util.Scanner;

public class Exercise_Switch {
	public static void main(String[] args) {
		System.out.println("請輸入表示星期的英文單詞:");
		Scanner sc = new Scanner(System.in);
		String week = sc.next();
		/*
		 * 使用者在輸入表示星期的英文單詞時,有輸小寫的,有輸入大寫的,有輸入大小寫混合的,為了統一
		 * 呼叫toLowerCase()方法將輸入的單詞全部轉換為小寫從而好與case中的相匹配
		 */
		
		week=week.toLowerCase();//把字串中的字元全部改為小寫
		switch (week) {
		case "monday":
			System.out.println("星期一");
			break;
		case "tuesday":
			System.out.println("星期二");
			break;
		case "wednesday":
			System.out.println("星期三");
			break;
		case "thursday":
			System.out.println("星期四");
			break;
		case "friday":
			System.out.println("星期五");
			break;
		case "saturday":
			System.out.println("星期六");
			break;
		case "sunday":
			System.out.println("星期日");
			break;
		default :
			System.out.println("單詞輸入錯誤!");

		
		}

	}

}

執行結果
在這裡插入圖片描述