- 好好學Java:從零基礎到項目實戰
- 歐陽燊
- 1114字
- 2022-07-27 19:14:56
3.2.1 條件分支
在現實生活中,常常需要在岔路口抉擇走去何方,往南還是往北,向東還是向西。在Java編程中,利用if語句可判斷接下來要做什么,比如:如果某個條件成立,就執行某種處理;否則執行另一種處理。if語句的具體格式為“if (條件) { /*條件成立時的操作代碼*/ } else { /*條件不成立時的操作代碼*/ }”,其中后面的else分支是可選的。下面是一個if判斷的簡單代碼示例(完整代碼見本章源碼的src\com\control\process\Condition.java):
System.out.println("涼風有信,秋月無邊。打二字"); System.out.println("獲取“涼風有信”的謎底請按1,獲取“秋月無邊”的謎底請按2"); Scanner scan=new Scanner(System.in); // 從控制臺接收輸入文本 int seq=scan.nextInt(); // nextInt方法表示接收一個整數,以回車鍵結尾 if (seq == 1) { // 按1時打印“涼風有信”的謎底 System.out.println("涼風有信的謎底是“諷”"); } if (seq == 2) { // 按2時打印“秋月無邊”的謎底 System.out.println("秋月無邊的謎底是“二”"); }
上面的例子,目的是根據輸入的數字來顯示對應的謎底,當輸入數字1時,日志打印“涼風有信”的謎底;當輸入數字2時,日志打印“秋月無邊”的謎底。然而,如果輸入其他數字,就什么都不打印,這樣未免太嚴格了,不如對所有非1的數字,都自動轉換成數字2。此時else分支就派上用場了,凡是非1的數字,自動默認變為數字2。于是,補充了自動轉換數字的賦值代碼如下:
if (seq == 1) { // 為1的情況 seq=1; } else { // 不為1的情況 seq=2; }
以上的賦值轉換代碼雖然實現的功能很簡單,但是足足占用了5行代碼,著實拖泥帶水。仔細分析它的代碼邏輯,其實包括3個要素,其一為判斷條件,其二為條件滿足時的賦值,其三為條件不滿足時的賦值,因而Java引入了新的三元運算符“?:”加以優化。該運算符的完整形式為“式子A?式子B:式子C”,當式子A成立時,運算結果為B,否則運算結果為C。如此一來,先前的數值轉換代碼可以改寫成下面這樣的(完整代碼見本章源碼的src\com\control\process\Condition2.java):
// “式子A ? 式子B : 式子C”里的問號加冒號構成了一個三元運算符 // 當式子A成立時,運算結果為B,否則(式子A不成立)結果為C seq=seq==1?1:2; // 等價于 seq=(seq==1)?1:2
改寫后的代碼僅有一行而已,盡管未出現if和else的身影,但它是一種從條件語句簡化來的條件運算符。
當然,運算符“?:”最終是為了得到條件判斷的運算結果,倘若業務邏輯并不要求返回什么數值,而是要求執行某項動作(比如打印日志),那么這個三元運算符便不再適用了。例如,前面的文字猜謎游戲,假設不需要對變量seq轉換數值,而是發現非1數字時直接打印“秋月無邊”的謎底,則應當書寫完整的if/else語句,不可也無法再套用運算符“?:”。此時修改后的代碼就變成下面這樣了(完整代碼見本章源碼的src\com\control\process\Condition3.java):
if (seq == 1) { // 條件式子為真時,進入if分支處理 System.out.println("涼風有信的謎底是“諷”"); } else { // 否則(條件式子為假),進入else分支處理 System.out.println("秋月無邊的謎底是“二”"); }
所以,三元運算符“?:”僅適用于需要返回計算結果的場合。
- Software Defined Networking with OpenFlow
- Android 9 Development Cookbook(Third Edition)
- OpenNI Cookbook
- Kotlin Standard Library Cookbook
- Learning ELK Stack
- Nginx Lua開發實戰
- Test-Driven Development with Django
- C專家編程
- 輕松上手2D游戲開發:Unity入門
- OpenCV with Python By Example
- Unity&VR游戲美術設計實戰
- Illustrator CS6設計與應用任務教程
- Spring 5 Design Patterns
- Mastering Adobe Captivate 7
- 監控的藝術:云原生時代的監控框架