3.8流程控制
到此為止,我們已經基本瞭解了Java的基礎語法,會定義不同型別的變數,會命名,會給變數賦值和運算等。接下來,我們需要學會流程控制方面的知識。
3.8.1選擇語句
3.8.1.1if-else語句
你們一定都買過彩票吧,沒買過的舉手!很好,都買過。買完之後,是不是經常幻想中了500萬之後幹什麼?我經常幻想中了500萬後就買輛寶馬X5。那麼用程式來描述這個問題,就可以用if條件語句,像下面這樣:
我們把現實需求轉化為流程控制模型,然後用程式碼語句實現。幻想很美好,現實很殘酷。買彩票的錢經常都是打水漂。但是我們就不買了嗎?NO,我覺得下次我一定會中!那麼就變成了下面這樣:
買了幾十期之後,我們發現偶爾還會見到回頭錢,有時候中個5塊,有時候中個10塊,有時候還能運氣爆棚一下,中個200塊。像筆者中10塊的時候,下一期就多買5注,中200的時候,就會去擼個串打個牙祭:
if條件語句非常簡單,但是需要注意幾點:
- “條件”可以是簡單的boolean變數或常量,也可以是複雜的表示式,但是最終結果必須是一個boolean值
- 當程式碼塊只有一條語句時,“{}”可以省略,但是不建議這麼做
- if-else條件語句是可以巢狀的,即上圖中的程式碼塊還可以繼續使用if-else語句。
在編寫程式的時候,需要注意程式碼縮排保證可讀性。比如像上圖程式碼可以改寫成:
if (n >= 5000000) { System.out.println("買一輛寶馬X5"); } else { if (n >= 200) { System.out.println("擼串"); } else if (n >= 10) { System.out.println("多買5注"); } }
3.8.1.2switch語句
對於上面那個例子,條件是判斷一個值是否等於某個值,並且選項很多,對於這種情況,還可以用另外一種選擇語句來描述,就是switch語句。switch在處理多個選項時,比較方便。它的基本語法結構如下:
編碼舉例如下:
switch (n) { case 5000000: System.out.println("買一輛寶馬X5"); break; case 200: System.out.println("擼串"); break; case 10: System.out.println("多買5注"); break; default: System.out.println("買一注"); break; }
需要特別注意的是圖中3段文字。總結成文字如下:
- switch 語句中的變數型別可以是: byte、short、int 或者 char。從 Java SE 7 開始支援字串 String 型別了,同時 case 標籤必須為字串常量或字面量。
- switch 語句可以擁有多個 case 語句。每個 case 後面跟一個要比較的值和冒號。
- case 語句中的值的資料型別必須與變數的資料型別相同,而且只能是常量或者字面常量。
- 當變數的值與 case 語句的值相等時,那麼 case 語句之後的語句開始執行,直到 break 語句出現才會跳出 switch 語句。
- 當遇到 break 語句時,switch 語句終止。程式跳轉到 switch 語句後面的語句執行。case 語句不必須要包含 break 語句。如果沒有 break 語句出現,程式會繼續執行下一條 case 語句,直到出現 break 語句。
- switch 語句可以包含一個 default 分支,該分支一般是 switch 語句的最後一個分支(可以在任何位置,但建議在最後一個)。default 在沒有 case 語句的值和變數值相等的時候執行。default 分支不需要 break 語句。
至於switch和if-else的選擇,筆者沒有做太多的研究,據網上一些文章說,當選擇項比較多的時候switch效率要高一些。不過筆者在實際運用中,很少使用switch。