最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?switch?case語(yǔ)句舉例詳解

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

前言

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

switch 語(yǔ)句格式

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

switch 語(yǔ)句的基本語(yǔ)法形式如下所示:

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

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

1)switch

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

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

2)case

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

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

  • 枚舉常量。

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

例如:

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

當(dāng)在 switch 語(yǔ)句中使用枚舉常量時(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 后要緊跟冒號(hào),default 塊和 case 塊的先后順序可以變動(dòng),不會(huì)影響程序執(zhí)行結(jié)果。通常,default 塊放在末尾,也可以省略不寫(xiě)。

4)break

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

如果在 case 分支語(yǔ)句的末尾沒(méi)有 break 語(yǔ)句,有可能觸發(fā)多個(gè) case 分支。那么就會(huì)接著執(zhí)行下一個(gè) case 分支語(yǔ)句。這種情況相當(dāng)危險(xiǎn),常常會(huì)引發(fā)錯(cuò)誤。為此,我們?cè)诔绦蛑袕牟皇褂?switch 語(yǔ)句。

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

javac -Xlint:fallthrough Test.java

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

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

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

例 1

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

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

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

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

請(qǐng)輸入座位號(hào)碼:
888
恭喜你,獲得了一等獎(jiǎng)!
請(qǐng)輸入座位號(hào)碼:
88
恭喜你,獲得了二等獎(jiǎng)!
請(qǐng)輸入座位號(hào)碼:
66
謝謝參與!

例 2

編寫(xiě)一個(gè) Java 程序,根據(jù)當(dāng)前的星期數(shù)字輸出對(duì)應(yīng)的漢字。在這里使用包含 break 的 switch 語(yǔ)句來(lái)判斷當(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 語(yǔ)句判斷 week 的值:0 表示星期日,1 表示星期一,2 表示星期二……以此類(lèi)推,6 表示星期六。只要 week 值與 case 值相符合,則程序?qū)?zhí)行該 case 中的語(yǔ)句,并跳出 switch 語(yǔ)句,輸出結(jié)果。

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

今天是星期五

嵌套 switch 語(yǔ)句

可以將一個(gè) switch 語(yǔ)句作為一個(gè)外部 switch 語(yǔ)句的語(yǔ)句序列的一部分,這稱為嵌套 switch 語(yǔ)句。因?yàn)橐粋€(gè) switch 語(yǔ)句定義了自己的塊,外部 switch 語(yǔ)句和內(nèi)部 switch 語(yǔ)句的 case 常量不會(huì)產(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 語(yǔ)句中的case 1:語(yǔ)句與外部 switch 語(yǔ)句中的case 1:語(yǔ)句不沖突。變量 count 僅與外層的 case 語(yǔ)句相比較。如果變量 count 為 1,則變量 target 與內(nèi)層的 case 語(yǔ)句相比較。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Java管理對(duì)象方法總結(jié)

    Java管理對(duì)象方法總結(jié)

    在本篇文章中小編給大家分享了關(guān)于Java管理對(duì)象方法以及相關(guān)代碼知識(shí)點(diǎn),需要的朋友們跟著學(xué)習(xí)下。
    2019-05-05
  • Java語(yǔ)言求解完美數(shù)代碼分析

    Java語(yǔ)言求解完美數(shù)代碼分析

    這篇文章主要介紹了Java語(yǔ)言求解完美數(shù)代碼分析,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • Spring Boot之過(guò)濾器 Filter注入的方式解析

    Spring Boot之過(guò)濾器 Filter注入的方式解析

    這篇文章主要介紹了Spring Boot之過(guò)濾器 Filter注入的方式解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring狀態(tài)機(jī)的使用解讀

    Spring狀態(tài)機(jī)的使用解讀

    本文詳細(xì)介紹了Spring狀態(tài)機(jī)的基本概念、核心組件以及在生產(chǎn)環(huán)境中的應(yīng)用,通過(guò)訂單系統(tǒng)和審批工作流系統(tǒng)的例子,展示了狀態(tài)機(jī)如何簡(jiǎn)化狀態(tài)流轉(zhuǎn)處理,此外,還介紹了狀態(tài)監(jiān)聽(tīng)器、Guards、可視化、分布式狀態(tài)一致性、性能優(yōu)化等技巧,并總結(jié)了Spring狀態(tài)機(jī)的優(yōu)勢(shì)
    2026-01-01
  • Spring?Data?JPA系列QueryByExampleExecutor使用詳解

    Spring?Data?JPA系列QueryByExampleExecutor使用詳解

    這篇文章主要為大家介紹了Spring?Data?JPA系列QueryByExampleExecutor使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • spring在IoC容器中裝配Bean詳解

    spring在IoC容器中裝配Bean詳解

    這篇文章主要介紹了spring在IoC容器中裝配Bean詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • springboot?neo4j的配置代碼

    springboot?neo4j的配置代碼

    小編最近的工作中遇到了一些知識(shí)圖譜的工作,自然就用到了圖數(shù)據(jù)庫(kù),這一NoSQL?數(shù)據(jù)庫(kù)可以很好的展示節(jié)點(diǎn)之間的關(guān)聯(lián)關(guān)系,對(duì)于一些圖譜的關(guān)系操作是很好的選擇,下面來(lái)介紹下?Springboot?配置Neo4J的問(wèn)題
    2021-12-12
  • 一篇文章教你如何用Java自定義一個(gè)參數(shù)校驗(yàn)器

    一篇文章教你如何用Java自定義一個(gè)參數(shù)校驗(yàn)器

    這篇文章主要介紹了使用java自定義一個(gè)參數(shù)校驗(yàn)器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)
    2021-09-09
  • Java多線程處理千萬(wàn)級(jí)數(shù)據(jù)更新操作

    Java多線程處理千萬(wàn)級(jí)數(shù)據(jù)更新操作

    這篇文章主要為大家詳細(xì)介紹了Java如何通過(guò)多線程處理千萬(wàn)級(jí)數(shù)據(jù)更新操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • Java經(jīng)典面試題匯總:Spring Boot

    Java經(jīng)典面試題匯總:Spring Boot

    本篇總結(jié)的是Spring-Boot框架相關(guān)的面試題,后續(xù)會(huì)持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實(shí)習(xí)生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯(cuò)誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07

最新評(píng)論

龙江县| 瓮安县| 平凉市| 金山区| 高州市| 开封市| 大厂| 特克斯县| 儋州市| 万安县| 汝州市| 大安市| 镇安县| 鹰潭市| 德昌县| 平遥县| 郴州市| 文水县| 宁津县| 三原县| 隆尧县| 长宁区| 平武县| 格尔木市| 岑巩县| 育儿| 新野县| 微山县| 嘉黎县| 白沙| 鹤岗市| 溧水县| 乾安县| 岫岩| 北宁市| 共和县| 霍林郭勒市| 乃东县| 中江县| 泗水县| 永宁县|