Java 入門指南
單元 6 - 選擇
程式中的選擇 (selection) 就是依條件 (condition) 使程式有不同的執行方向,若條件為真,也就是 true ,程式就會跳過 false 的部份執行 true 的部份,反之亦然
↘
false
選擇結構有單一選擇跟多重選擇,兩者都可使用 if 陳述 (if statement) , if 為關鍵字 (keyword) 之一,若是多重選擇 if 須與 else 連用。單一選擇,也就是單獨使用 if 陳述,如下
if (3 > 5) {
System.out.println("3大於5發生了!");
}
以上條件為 3 大於 5 ,如果 3 大於 5 為真,程式就會執行條件後的大括弧的程式區塊 (block) ,如果 3 大於 5 為假,程式就會跳過條件後的程式區塊,去找程式區塊後的第一個陳述 (statement) 執行。
if 與 else 連用,條件為真,就會執行 if 後的程式區塊,反之條件為假,就會執行 else 後的程式區塊
if (3 > 5) {
System.out.println("3大於5發生了!");
}
else {
System.out.println("3沒有大於5!");
}
if-else 也可以多個連用,形成 if-else if-else 的多重選擇,最後的 else 表示以上皆非
if (3 > 5) {
System.out.println("3大於5發生了!");
}
else if (4 > 5) {
System.out.println("4大於5發生了!");
}
else if (5 > 5) {
System.out.println("5大於5發生了!");
}
else if (6 > 5) {
System.out.println("6當然大於5哩!");
}
else {
System.out.println("沒有符合的條件");
}
我們將以上寫成完整的範例程式,如下
/*
* 檔名:SelectionDemo.java
* 作者:張凱慶
* 網站:http://kaiching.org
*/
package selectiondemo;
// 示範 if-else 的類別
public class SelectionDemo {
public static void main(String[] args) {
System.out.println();
if (3 > 5) {
System.out.println("3大於5發生了!");
}
else if (4 > 5) {
System.out.println("4大於5發生了!");
}
else if (5 > 5) {
System.out.println("5大於5發生了!");
}
else if (6 > 5) {
System.out.println("6當然大於5哩!");
}
else {
System.out.println("沒有符合的條件");
}
System.out.println();
}
}
執行結果如下
6當然大於5哩! |
if-else if-else 的缺點是需要很多個條件,程式需要做多次條件判斷,因此另外有個 switch 陳述 (switch statement) ,條件為一個常數 (constant) 值,這會依序尋找符合的 case 。同樣的 switch 、 case 也都是關鍵字
switch (6) {
case 3:
System.out.println("選擇是3...");
break;
case 4:
System.out.println("選擇是4...");
break;
case 5:
System.out.println("選擇是5...");
break;
case 6:
System.out.println("選擇是6...");
break;
default:
System.out.println("沒有符合的");
}
這裡, switch 後面的小括弧必須是常數值,此例中直接使用字面常數 (literal) ,也可以使用有常數值的變數 (variable) 。 case 後空一格,然後也是接常數值,通常就是直接填入符合情況的字面常數,注意,每個 case 的常數後都要接冒號。
case 底下的陳述,習慣上沒有用大括弧,而是用縮排 (indentation) 的方式表示屬於哪個 case 。每個 case 的最後,我們都有加上 break 陳述 (break statement) ,這會讓程式中斷然後跳出整個 switch 陳述,這就是說找到符合的 case 以後,執行完 case 底下的工作,到此就跳出 switch-case 的範圍,然後程式繼續執行 switch 大括弧後的部份。
整個 switch-case 最下面有個 default , default 就是預設情況,如果以上皆非就會執行 default 的地方,這跟 if-else if-else 最後的 else 的用法相同。但是,如果 case 後沒有 break 的話,這樣 default 每一次都會被執行。同樣的, break 與 default 也都是關鍵字之一。
我們將此例寫成完整的範例程式,如下
/*
* 檔名:SwitchDemo.java
* 作者:張凱慶
* 網站:http://kaiching.org
*/
package switchdemo;
// 示範 switch-case 的類別
public class SwitchDemo {
public static void main(String[] args) {
System.out.println();
switch (6) {
case 3:
System.out.println("選擇是3...");
break;
case 4:
System.out.println("選擇是4...");
break;
case 5:
System.out.println("選擇是5...");
break;
case 6:
System.out.println("選擇是6...");
break;
default:
System.out.println("沒有符合的");
}
System.out.println();
}
}
執行結果如下
選擇是6... |
複合陳述 (compound statement) 除了選擇結構 (selection structure) 還有重複結構 (repetition structure) ,重複結構也被稱為迴圈 (loop) ,接下來我們就來看看如何使用迴圈吧!
相關教學影片
中英文術語對照 | |
---|---|
block | 程式區塊 |
break statement | break 陳述 |
compound statement | 複合陳述 |
condition | 條件 |
constant | 常數 |
indentation | 縮排 |
if statement | if 陳述 |
keyword | 關鍵字 |
literal | 字面常數 |
loop | 迴圈 |
repetition structure | 重複結構 |
selection | 選擇 |
selection structure | 選擇結構 |
statement | 陳述 |
switch statement | switch 陳述 |
variable | 變數 |
參考資料 | |
---|---|
1. The Java™ Tutorials: Control Flow Statements | |
2. The Java™ Tutorials: The if-then and if-then-else Statements | |
3. The Java™ Tutorials: The switch Statement |
重點整理 |
---|
1. 程式中的選擇結構有兩種,一種是 if-else ,另一種是 switch-case 。 |
2. if-else 是在 if 後面接條件,如果條件為真,就執行 if 底下的程式區塊,反之執行 else 底下的程式區塊。 |
3. switch-case 是在 switch 後接一個常數,下面有處理各種常數值的 case ,最後可接 default 處理沒有對應到 case 的情況,每個 case 的最後要接上 break 。 |
問題與討論 |
---|
1. 我們在大括弧的程式區塊都有縮排,縮排的空格數有差異嗎?如果不縮排可以通過編譯嗎? |
2. else if 的個數有限制嗎? |
3. 為什麼要有 switch 陳述,多個 if-else if-else 不也一樣? |
4. switch 陳述可以用物件當條件嗎? |
練習 |
---|
1. 建立一個新專案 Exercise0601 ,宣告兩個整數變數 a 及 b , a 設定為 3 , b 設定為 5 ,利用 if 陳述判斷兩者是否相等,不管是否相等都印出對應的訊息。 |
2. 承上題,另建立一個新專案 Exercise0602 ,改成接受使用者輸入。 |
3. 建立一個新專案 Exercise0603 ,宣告整數變數 a 並將 a 設定為 6 ,然後寫一個 switch 判斷 a 屬於 0 到 9 哪一個整數,每個 case 不加上 break ,最後也不加上 default 。 |
4. 承上題,另建立一個新專案 Exercise0604 ,加入 break 及 default 。 |
5. 承上題,另建立一個新專案 Exercise0605 ,改成接受使用者輸入。 |
6. 承上題,另建立一個新專案 Exercise0606 ,改成用 if-else 來寫。 |
7. 承上題,另建立一個新專案 Exercise0607 ,改成判斷小於 60 , 60 到 70 , 70 到 80 , 80 到 90 , 90 到 100 ,以及 100 等幾種情況。 |