Java 入門指南 - 選擇

程式中的選擇 (selection) 就是依條件 (condition) 使程式有不同的執行方向,若條件為真,也就是 true ,程式就會跳過 false 的部份執行 true 的部份,反之亦然




選擇結構有單一選擇跟多重選擇,兩者都可使用 if 陳述 (if statement) , if 為關鍵字 (keyword) 之一,若是多重選擇 if 須與 else 連用。單一選擇,也就是單獨使用 if 陳述,如下
if (3 > 5) {
    System.out.println("喔,3大於5發生了!");
}


以上條件為 3 大於 5 ,如果 3 大於 5 為真,程式就會執行條件後的大括弧的程式區塊 (block) ,如果 3 大於 5 為假,程式就會跳過條件後的程式區塊,去找程式區塊後的第一個陳述 (statement) 執行。


ifelse 連用,條件為真,就會執行 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("以上沒有符合的條件 :(");
}


我們將以上寫成完整的範例程式,如下
// 示範 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();
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:SelectionDemo.java
    功能:示範 Java 程式 
    作者:張凱慶
    時間:西元 2011 年 4 月 */


編譯 (compile) 後執行,如下



if-else if-else 的缺點是需要很多個條件,程式需要做多次條件判斷,因此另外有個 switch 陳述 (switch statement) ,條件為一個常數 (constant) 值,這會依序尋找符合的 case 。同樣的 switchcase 也都是關鍵字
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 最下面有個 defaultdefault 就是預設情況,如果以上皆非就會執行 default 的地方,這跟 if-else if-else 最後的 else 的用法相同。但是,如果 case 後沒有 break 的話,這樣 default 每一次都會被執行。同樣的, breakdefault 也都是關鍵字之一。


我們將此例寫成完整的範例程式,如下
// 示範 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();
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:SwitchDemo.java
    功能:示範 Java 程式 
    作者:張凱慶
    時間:西元 2011 年 4 月 */


編譯後執行,如下



複合陳述 (compound statement) 除了選擇結構 (selection structure) 還有重複結構 (repetition structure) ,重複結構也被稱為迴圈 (loop) ,接下來我們就來看看如何使用迴圈吧!


中英文術語對照
選擇selection
條件condition
if 陳述if statement
關鍵字keyword
程式區塊block
陳述statement
編譯compile
switch 陳述switch statement
常數constant
字面常數literal
縮排indentation
break 陳述break statement
複合陳述compound statement
選擇結構selection structure
重複結構repetition structure
迴圈loop


您可以繼續參考
基礎篇


相關目錄
回 Java 入門指南
回 Java 教材目錄
回首頁


參考資料
The JavaTM Tutorials: Getting Started
The JavaTM Tutorials: Learning the Java Language
The JavaTM Tutorials: Essential Classes
The Java Language Specification, Third Edition


本文於 2013 年 1 月訂正

4 則留言:

OZ Liu 提到...

編議 if-else範例 出現以下錯誤
Demo4.java:2: error: class SelectionDemo is public, should be declared in a file
named SelectionDemo.java
public class SelectionDemo {
^
1 error

Kaiching Chang 提到...

檔名必須和類別名稱相同唷,請將 Demo4.java 的檔名變更為 SelectionDemo.java
不然就將 SelectionDemo 的類別名稱改為 Demo4

symis 提到...

case 5: System.out.println("選擇是3...");
→ 後面應該改為:選擇是5吧!

Kaiching Chang 提到...

這部份打錯了,已修改,感謝指正 :)