
程式中的選擇 (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) 執行。
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("沒有符合的條件"); | |
| } |
我們將以上寫成完整的範例程式,如下
| 001 | // 示範 if-else 的類別 |
| 002 | public class SelectionDemo { |
| 003 | public static void main(String[] args) { |
| 004 | System.out.println(); |
| 005 | if (3 > 5) { |
| 006 | System.out.println("3大於5發生了!"); |
| 007 | } |
| 008 | else if (4 > 5) { |
| 009 | System.out.println("4大於5發生了!"); |
| 010 | } |
| 011 | else if (5 > 5) { |
| 012 | System.out.println("5大於5發生了!"); |
| 013 | } |
| 014 | else if (6 > 5) { |
| 015 | System.out.println("6當然大於5哩!"); |
| 016 | } |
| 017 | else { |
| 018 | System.out.println("沒有符合的條件"); |
| 019 | } |
| 020 | System.out.println(); |
| 021 | } |
| 022 | } |
| 023 | |
| 024 | /* 檔名: SelectionDemo.java |
| 025 | 作者: Kaiching Chang |
| 026 | 時間: September, 2014 */ |
編譯 (compile) 後執行,如下

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 也都是關鍵字之一。
我們將此例寫成完整的範例程式,如下
| 001 | // 示範 switch-case 的類別 |
| 002 | public class SwitchDemo { |
| 003 | public static void main(String[] args) { |
| 004 | System.out.println(); |
| 005 | switch (6) { |
| 006 | case 3: |
| 007 | System.out.println("選擇是3..."); |
| 008 | break; |
| 009 | |
| 010 | case 4: |
| 011 | System.out.println("選擇是4..."); |
| 012 | break; |
| 013 | |
| 014 | case 5: |
| 015 | System.out.println("選擇是5..."); |
| 016 | break; |
| 017 | |
| 018 | case 6: |
| 019 | System.out.println("選擇是6..."); |
| 020 | break; |
| 021 | |
| 022 | default: |
| 023 | System.out.println("沒有符合的"); |
| 024 | } |
| 025 | System.out.println(); |
| 026 | } |
| 027 | } |
| 028 | |
| 029 | /* 檔名: SwitchDemo.java |
| 030 | 作者: Kaiching Chang |
| 031 | 時間: September, 2014 */ |
編譯後執行,如下

複合陳述 (compound statement) 除了選擇結構 (selection structure) 還有重複結構 (repetition structure) ,重複結構也被稱為迴圈 (loop) ,接下來我們就來看看如何使用迴圈吧!
中英文術語對照
| 選擇 | selection |
| 條件 | condition |
| if 陳述 | if statement |
| 關鍵字 | keyword |
| 區塊 | block |
| 陳述 | statement |
| switch 陳述 | switch statement |
| 常數 | constant |
| 變數 | variable |
| 縮排 | indentation |
| break 陳述 | break statement |
| 複合陳述 | compound statement |
| 選擇結構 | selection structure |
| 重複結構 | repetition structure |
| 迴圈 | loop |
重點整理
- 單一的 if 陳述判斷條件是否為真,若為真則執行 if 後的程式區塊。
- if-else 陳述,條件為真時執行 if 後的程式區塊,否則執行 else 後的程式區塊, if-else if-else 可以形成多重選擇。
- switch 陳述利用判斷常數值選擇執行的 case ,最後的 default 則是預設的選項。
問題與討論
- 我們在大括弧的程式區塊都有縮排,縮排的空格數有差異嗎?如果不縮排可以通過編譯嗎?
- 為什麼要有 switch 陳述,多個 if-else if-else 不也一樣?
- else if 的個數有限制嗎?
the end
沒有留言:
張貼留言