欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?switch?case語句舉例詳解

 更新時(shí)間:2023年10月27日 16:48:59   作者:NOGE2022  
這篇文章主要給大家介紹了關(guān)于Java?switch?case語句舉例詳解的相關(guān)資料,switch case語句是一種流程控制語句,用于根據(jù)不同的條件執(zhí)行不同的代碼塊,需要的朋友可以參考下

前言

if…else 語句可以用來描述一個(gè)“二岔路口”,我們只能選擇其中一條路來繼續(xù)走,然而生活中經(jīng)常會碰到“多岔路口”的情況。switch 語句提供了 if 語句的一個(gè)變通形式,可以從多個(gè)語句塊中選擇其中的一個(gè)執(zhí)行。

switch 語句格式

switch 語句是 Java 的多路分支語句。它提供了一種基于一個(gè)表達(dá)式的值來使程序執(zhí)行不同部分的簡單方法。因此,它提供了一個(gè)比一系列 if-else-if 語句更好的選擇。

switch 語句的基本語法形式如下所示:

switch(表達(dá)式){
case 值1:
        語句塊1;
break;
case 值2:
        語句塊2;
break;
    …
case 值n:
        語句塊n;
break;
default:
        語句塊n+1;
break;
}

其中,switch、case、default、break 都是 Java 的關(guān)鍵字。

1)switch

表示“開關(guān)”,這個(gè)開關(guān)就是 switch 關(guān)鍵字后面小括號里的值,小括號里要放一個(gè)整型變量或字符型變量。表達(dá)式必須為 byte,short,int,char類型。

Java7 增強(qiáng)了 switch 語句的功能,允許 switch 語句的控制表達(dá)式是 java.lang.String 類型的變量或表達(dá)式。只能是 java.lang.String 類型,不能是 StringBuffer 或 StringBuilder 這兩種字符串的類型。

2)case

表示“情況,情形”,case 標(biāo)簽可以是:

  • 類型為 char、byte、 short 或 int 的常量表達(dá)式。

  • 枚舉常量。

  • 從 Java SE 7 開始, case 標(biāo)簽還可以是字符串字面量。

例如:

String input =...;
switch(input.toLowerCase()){// toLowerCase用于將大寫字符轉(zhuǎn)換為小寫
case"yes":
...
break;
}

當(dāng)在 switch 語句中使用枚舉常量時(shí),不必在每個(gè)標(biāo)簽中指明枚舉名,可以由 switch 的表達(dá)式值確定。例如:

Size sz =...;
switch(sz){
case SMALL:// no need to use Size.SMALL
...
break;
...
}

注意:重復(fù)的 case 值是不允許的。

3)default

表示“默認(rèn)”,即其他情況都不滿足。default 后要緊跟冒號,default 塊和 case 塊的先后順序可以變動,不會影響程序執(zhí)行結(jié)果。通常,default 塊放在末尾,也可以省略不寫。

4)break

表示“停止”,即跳出當(dāng)前結(jié)構(gòu)。

如果在 case 分支語句的末尾沒有 break 語句,有可能觸發(fā)多個(gè) case 分支。那么就會接著執(zhí)行下一個(gè) case 分支語句。這種情況相當(dāng)危險(xiǎn),常常會引發(fā)錯誤。為此,我們在程序中從不使用 switch 語句。

如果你喜歡 switch 語句,編譯代碼時(shí)可以考慮加上 -Xlint:fallthrough 選項(xiàng),如下所示:

javac -Xlint:fallthrough Test.java

這樣一來,如果某個(gè)分支最后缺少一個(gè) break 語句,編譯器就會給出一個(gè)警告消息。

switch 語句的執(zhí)行過程如下:表達(dá)式的值與每個(gè) case 語句中的常量作比較。如果發(fā)現(xiàn)了一個(gè)與之相匹配的,則執(zhí)行該 case 語句后的代碼。如果沒有一個(gè) case 常量與表達(dá)式的值相匹配,則執(zhí)行 default 語句。當(dāng)然,default 語句是可選的。如果沒有相匹配的 case 語句,也沒有 default 語句,則什么也不執(zhí)行。

圖 1 switch語句執(zhí)行流程圖

例 1

在節(jié)目的抽獎環(huán)節(jié)里,節(jié)目組會根據(jù)每位嘉賓的座位號來進(jìn)行抽獎游戲,根據(jù)不同的號碼來決定獎項(xiàng)的大小。使用 switch 語句編寫 Java 程序來完成獎項(xiàng)分配,其實(shí)現(xiàn)代碼如下。

publicstaticvoidmain(String[] args){
    System.out.println("請輸入座位號碼:");
Scanner sc =newScanner(System.in);
int num = sc.nextInt();
switch(num){
case8:
        System.out.println("恭喜你,獲得了三等獎!");
break;
case88:
        System.out.println("恭喜你,獲得了二等獎!");
break;
case888:
        System.out.println("恭喜你,獲得了一等獎!");
break;
default:
        System.out.println("謝謝參與!");
break;
}
}

當(dāng)用戶輸入的號碼為 888 時(shí),獲取的 num 值為 888,則與第三個(gè) case 后的值匹配,執(zhí)行它后面的語句,輸出“恭喜你,獲得了一等獎!”,然后執(zhí)行 break 語句,跳出整個(gè) switch 結(jié)構(gòu)。如果輸入的號碼與 case 中的值都不匹配,則執(zhí)行 default 后的語句。

程序執(zhí)行結(jié)果如下所示:

請輸入座位號碼:
888
恭喜你,獲得了一等獎!
請輸入座位號碼:
88
恭喜你,獲得了二等獎!
請輸入座位號碼:
66
謝謝參與!

例 2

編寫一個(gè) Java 程序,根據(jù)當(dāng)前的星期數(shù)字輸出對應(yīng)的漢字。在這里使用包含 break 的 switch 語句來判斷當(dāng)前的星期,實(shí)現(xiàn)代碼如下:

publicstaticvoidmain(String[] args){
String weekDate ="";
Calendar calendar = Calendar.getInstance();// 獲取當(dāng)前時(shí)間
int week = calendar.get(Calendar.DAY_OF_WEEK)-1;// 獲取星期的第幾日
switch(week){
case0:
            weekDate ="星期日";
break;
case1:
            weekDate ="星期一";
break;
case2:
            weekDate ="星期二";
break;
case3:
            weekDate ="星期三";
break;
case4:
            weekDate ="星期四";
break;
case5:
            weekDate ="星期五";
break;
case6:
            weekDate ="星期六";
break;
}
    System.out.println("今天是 "+ weekDate);
}

本程序首先獲取當(dāng)前的星期值,然后使用 switch 語句判斷 week 的值:0 表示星期日,1 表示星期一,2 表示星期二……以此類推,6 表示星期六。只要 week 值與 case 值相符合,則程序?qū)?zhí)行該 case 中的語句,并跳出 switch 語句,輸出結(jié)果。

運(yùn)行程序,輸出的結(jié)果如下:

今天是星期五

嵌套 switch 語句

可以將一個(gè) switch 語句作為一個(gè)外部 switch 語句的語句序列的一部分,這稱為嵌套 switch 語句。因?yàn)橐粋€(gè) switch 語句定義了自己的塊,外部 switch 語句和內(nèi)部 switch 語句的 case 常量不會產(chǎn)生沖突。例如,下面的程序段是完全正確的:

publicstaticvoidmain(String[] args){
switch(count){
case1:
switch(target){
case0:
                System.out.println("target is zero");
break;
case1:
                System.out.println("target is one");
break;
}
break;
case2:// ...
}
}

本例中,內(nèi)部 switch 語句中的case 1:語句與外部 switch 語句中的case 1:語句不沖突。變量 count 僅與外層的 case 語句相比較。如果變量 count 為 1,則變量 target 與內(nèi)層的 case 語句相比較。

學(xué)到這里我們可以發(fā)現(xiàn)以下幾點(diǎn):

  • switch 語句不同于 if 語句的是 switch 語句僅能測試相等的情況,而 if 語句可計(jì)算任何類型的布爾表達(dá)式。也就是 switch 語句只能尋找 case 常量間某個(gè)值與表達(dá)式的值相匹配。

  • 在同一個(gè) switch 語句中沒有兩個(gè)相同的 case 常量。當(dāng)然,外部 switch 語句中的 case 常量可以和內(nèi)部 switch 語句中的 case 常量相同。

  • switch 語句通常比一系列嵌套 if 語句更有效。

最后一點(diǎn)尤其有趣,因?yàn)樗刮覀冎?Java 編譯器如何工作。當(dāng)編譯一個(gè) switch 語句時(shí),Java 編譯器將檢查每個(gè) case 常量并且創(chuàng)造一個(gè)“跳轉(zhuǎn)表”,這個(gè)表將用來在表達(dá)式值的基礎(chǔ)上選擇執(zhí)行路徑。因此,如果你需要在一組值中做出選擇,switch 語句將比與之等效的 if-else 語句快得多。

編譯器可以這樣做是因?yàn)樗?case 常量都是同類型的,所要做的只是將它與 switch 表達(dá)式相比較看是否相等。對于一系列的 if 表達(dá)式,編譯器就無此功能。

if 語句和 switch 語句的區(qū)別

if 和 switch 語句都表示條件語句,可以從使用效率和實(shí)用性兩方面加以區(qū)分。

1. 從使用效率上區(qū)分

從使用效率上區(qū)分,在對同一個(gè)變量的不同值作條件判斷時(shí),既可以使用 switch 語句,也可以使用 if 語句。使用 switch 語句的效率更高一些,尤其是判斷的分支越多,越明顯。

2. 從實(shí)用性上區(qū)分

從語句的實(shí)用性角度區(qū)分,switch 語句不如 if 條件語句,if 語句是應(yīng)用最廣泛和最實(shí)用的語句。

3. 何時(shí)使用 if 語句和 switch 語句

在程序開發(fā)的過程中,何時(shí)使用 if 語句和 switch 語句,需要根據(jù)實(shí)際情況而定,應(yīng)盡量做到物盡其用。不能因?yàn)?switch 語句的效率高就一直使用,也不能因?yàn)?if 語句常用就不用 switch 語句。需要根據(jù)實(shí)際情況,具體問題具體分析,使用最適合的條件語句。

一般情況下,對于判斷條件較少的,可以使用 if 條件語句,但是在實(shí)現(xiàn)一些多條件的判斷中,最好使用 switch 語句。

總結(jié)

到此這篇關(guān)于Java switch case語句的文章就介紹到這了,更多相關(guān)Java switch case語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決跨域請求,NG返回403(403并不一定是NG問題)

    解決跨域請求,NG返回403(403并不一定是NG問題)

    這篇文章主要介紹了解決跨域請求,NG返回403(403并不一定是NG問題),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 詳解springboot中的jar包部署步驟

    詳解springboot中的jar包部署步驟

    這篇文章主要介紹了springboot中的jar包部署步驟及l(fā)inux中部署項(xiàng)目常用指令,需要的朋友可以參考下
    2018-07-07
  • java時(shí)間 java.util.Calendar深入分析

    java時(shí)間 java.util.Calendar深入分析

    這篇文章主要介紹了java時(shí)間 java.util.Calendar深入分析的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Spring?Security過濾器鏈體系的實(shí)例詳解

    Spring?Security過濾器鏈體系的實(shí)例詳解

    這篇文章主要介紹了Spring?Security過濾器鏈體系,通過思維導(dǎo)圖可以很好的幫助大家理解配置類的相關(guān)知識,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • 如何解決mybatis查詢結(jié)果接收不同的問題

    如何解決mybatis查詢結(jié)果接收不同的問題

    這篇文章主要介紹了如何解決mybatis查詢結(jié)果接收不同的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java面向?qū)ο笾鄳B(tài)

    Java面向?qū)ο笾鄳B(tài)

    這篇文章主要介紹了Java面向?qū)ο笾鄳B(tài),文章以什么是多態(tài)、多態(tài)的實(shí)現(xiàn)條件、多態(tài)的訪問特點(diǎn)、多態(tài)的優(yōu)點(diǎn)和缺點(diǎn)的相關(guān)資料展開文章內(nèi)容,需要的小伙伴可以參考一下
    2021-10-10
  • java Socket UDP實(shí)例詳解

    java Socket UDP實(shí)例詳解

    這篇文章主要介紹了java Socket UDP實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • springmvc如何使用POJO作為參數(shù)

    springmvc如何使用POJO作為參數(shù)

    這篇文章主要介紹了springmvc如何使用POJO作為參數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • springboot整合ACTable生成數(shù)據(jù)庫表方式

    springboot整合ACTable生成數(shù)據(jù)庫表方式

    ACTable是一個(gè)增強(qiáng)Mybatis的功能框架,支持SpringBoot和SpringMvc項(xiàng)目,通過配置model注解即可創(chuàng)建、修改表結(jié)構(gòu),并實(shí)現(xiàn)了共通的CRUD功能
    2025-02-02
  • java模擬http的Get/Post請求,并設(shè)置ip與port代理的方法

    java模擬http的Get/Post請求,并設(shè)置ip與port代理的方法

    下面小編就為大家?guī)硪黄猨ava模擬http的Get/Post請求,并設(shè)置ip與port代理的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02

最新評論