書名: 好好學Java:從零基礎到項目實戰作者名: 歐陽燊本章字數: 1238字更新時間: 2022-07-27 19:14:56
3.2.2 多路分支
前面提到條件語句的標準格式為“if (條件) { /*條件成立時的操作代碼*/ } else { /*條件不成立時的操作代碼*/ }”,乍看之下仿佛只有兩個分支,一個是條件成立時的分支,另一個是條件不成立時的分支。很明顯僅僅兩個分支不能滿足復雜的業務需求,自然Java代碼也不會傻瓜到固步自封,為此else分支還允許嫁接別的if條件,形如“if (條件一) { } else if (條件二) { } else if (條件三) { } else { }”這樣,無論來幾個條件分支,都能通過“else if”加以判斷和處理。
像之前的猜謎游戲,輸入數字1時打印“涼風有信”的謎底,輸入數字2時打印“秋月無邊”的謎底,現在規定輸入其他數字要打印“按鍵有誤”的提示。此時一共存在3個條件分支,往原來的if/else語句添加一個“else if”即可實現3個分支。下面便是改寫成3個分支之后的代碼例子(完整代碼見本章源碼的src\com\control\process\Multipath.java):
System.out.println("涼風有信,秋月無邊。打二字"); System.out.println("獲取“涼風有信”的謎底請按1,獲取“秋月無邊”的謎底請按2"); Scanner scan=new Scanner(System.in); // 從控制臺接收輸入文本 int seq=scan.nextInt(); // nextInt方法表示接收一個整數,以回車鍵結尾 if (seq == 1) { // 條件式子1為真時,進入第一個if分支處理 System.out.println("涼風有信的謎底是“諷”"); } else if (seq == 2){ //否則繼續判斷條件式子2為真時,進入第二個if分支處理 System.out.println("秋月無邊的謎底是“二”"); } else { // 否則(前面的判斷條件都不滿足)進入else分支處理 System.out.println("您的按鍵有誤"); }
隨著分支數量多了起來,豈不是得寫一樣多的“if else”?這種做法雖然可行,但畢竟大費周章,條理也不夠清晰。故而早期的設計師構造了“swicth-case”語句,也被稱作多路分支結構。在該控制流程中,對每個分支都指定了一個數值把關,只有設定的變量符合數值要求,才能進入相應的分支處理。這樣做的好處是方便編譯器在底層優化,既可利用二分查找法加快尋找速度,又可采取地址映射直接找到指定分支。兼容并蓄的Java自然繼承了有利于調優的“swicth-case”,多路分支語句除了swicth和case外,還額外增加了break和default兩個關鍵字。break的作用是跳出整個多路分支,不再執行本分支及其余分支的代碼;default的作用相當于else,所有不滿足已知條件的數值都進入default這個默認分支處理。
仍以猜謎游戲為例,使用“swicth-case”改寫后的多路分支代碼如下(完整代碼見本章源碼的src\com\control\process\Multipath2.java):
// switch允許判斷某個變量的多個取值,并分別進行單獨處理 switch (seq) { case 1: // seq值為1時進入該分支 System.out.println("涼風有信的謎底是“諷”"); break; // 跳出多路分支,即跳到switch分支的右花括號之后 case 2: // seq值為2時進入該分支 System.out.println("秋月無邊的謎底是“二”"); break; // 跳出多路分支,即跳到switch分支的右花括號之后 default: // seq值為其他時進入該分支 System.out.println("您的按鍵有誤"); break; // 跳出多路分支,即跳到switch分支的右花括號之后 } System.out.println("猜謎結束");
多路分支固然好用,但要特別注意以下幾點:
(1)每個case分支末尾務必要加上break語句,否則即使該分支走完了也不會跳出多路分支,而是繼續執行該分支的后面一個分支的代碼,顯然這并非程序員的本意。
(2)多路分支只能判斷整型(含byte、short、int)、字符型、枚舉型3種類型的變量,無法判斷布爾、浮點、雙精度等其他類型的變量。
(3)case語句后面的數值只能做相等判斷,不能開展大于、小于等其他關系運算。
- Python入門很簡單
- PHP網絡編程學習筆記
- C語言程序設計案例式教程
- R的極客理想:工具篇
- Python高效開發實戰:Django、Tornado、Flask、Twisted(第3版)
- JavaScript動態網頁開發詳解
- 用戶體驗增長:數字化·智能化·綠色化
- Python Data Analysis Cookbook
- PHP編程基礎與實例教程
- Visual Basic程序設計教程
- Python極簡講義:一本書入門數據分析與機器學習
- C# and .NET Core Test Driven Development
- Android應用開發深入學習實錄
- ASP.NET求職寶典
- Python Linux系統管理與自動化運維