前言:
在 java 的條件控制中可分為 if-else 架構、三元運算子、switch-case 架構這三類,其中 if-else、三元運算子為條件型的判斷,條件必須為 true/false布林值;switch-case 為比對變數型的判斷,條件值比較多可以是 char、byte、short、int、enum、String(JDK7之後)值。有了這些條件控制語法,就可以依照條件的狀態來對程式碼進行控制,以下我會用範例來說明。
條件控制
|
判斷條件值的型態
|
if-else 架構
|
條件型(true / false)
|
三元運算子
|
條件型(true / false)
|
switch-case 架構
|
比對變數型(char、byte、short、int、enum、String)
|
1.條件型控制
if 敘述
指某一條件成立,執行某一件事情的概念,其中當條件成立會需要判斷 boolean 值,為true執行,若為false則不執行該區塊程式碼。
int score = 95; if(score >= 60){ System.out.println("成績 = " + score); }
if/else 敘述
if 語法可以加入 else 表示當 if 不成立的時候要做的事。例如:「如果考試不及格就要補考。」
int score = new Random().nextInt(100); if(score >= 60){ System.out.println("成績 = " + score); System.out.println("All pass"); } else if(score < 60){ System.out.println("成績不及格 = " + score); System.out.println("需要補考!"); }
多重 if 敘述
有的時候需要判斷"可能狀況"會有好幾種,這個時候可以使用多重IF敘述來描寫。例如:「如果考試成績90分以上為A,80分以上為B,70分以上為C,60分以上為D,60分以下為E等,依分數的多寡作區分。」
int score = new Random().nextInt(100);if(score >= 90){ System.out.println("成績 A"); } else if(score>=80 && score < 90){ System.out.println("成績 B"); } else if(score>=70 && score < 80){ System.out.println("成績 C"); } else if(score>=60 && score < 70){ System.out.println("成績 D"); } else if(score < 60){ System.out.println("成績 E"); } }
巢狀 if/esle 敘述
if/else 敘述中又包含其它 if 敘述,有的時候需要先做初步判斷好的條件下,再細部判斷處理,這時候就可以使用巢狀敘述。
int score = new Random().nextInt(100); if(score >= 60){ System.out.println("score = " + score); System.out.println("All pass"); } else if(score < 60){ System.out.println("score = " + score); if(score < 60 && score >= 40){ System.out.println("成績介於60-40分,需要補考!"); }else if(score < 40 ){ System.out.println("成績低於40分,需要重修!"); } }
三元運算子
(條件式 ? true : false) 可以說是 if/else 的簡化敘述,也是屬於條件行控制的一種。這邊以巢狀if/else範例做修改,程式如下:
int score = new Random().nextInt(100); System.out.println("score = " + score); if(score >= 60){ System.out.println("All pass"); } else if(score < 60){ System.out.println((score < 60 && score >= 40) ? "成績介於60-40分,需要補考!" : "成績低於40分,需要重修!"); }
2.比對變數型控制
switch case
跟條件型控制差一樣,也有多選一的的概念,只不多改成以比對變數控制。首先看看switch的括號,當中置放要取得值的變數或運算式,值必須是整數、字元、字串或Enum,取得值後會開始與case中設定的整數、字元、字串或Enum比對,如果符合就執行之後的陳述句,直到遇到break離開switch區塊,如果沒有符合的整數、字元、字串或Enum,則會執行default後的陳述句,default不一定需要,如果沒有預設要處理的動作,也可以省略default。
int score = new Random().nextInt(100); int level = score / 10; System.out.println("成績 = " + score); switch (level) { case 10: case 9: System.out.println("成績 A"); break; case 8: System.out.println("成績 B"); break; case 7: System.out.println("成績 C"); break; case 6: System.out.println("成績 D"); break; default: System.out.println("成績不及格,需要補考!"); }改寫成switch case程式碼會比 if/else 更容易閱讀,另一方面範例中的level只需要讀取一次,在效能上也會比較好。