Thinking in Java(3-2) 進階控制結構(Advanced Control Structures)

Thinking in Java(3-2) 進階控制結構(Advanced Control Structures)
Photo by orbtal media / Unsplash

在學習了基本的控制流程後,讓我們進一步探討 Java 中的進階控制結構,包括 returnbreakcontinueswitch 語句。這些語句能夠讓我們更靈活地控制程式的執行流程,編寫出更高效的程式。

return 語句

return 語句用於結束方法的執行,並可選擇性地返回一個值。利用 return 的特性,我們可以省略某些 else 語句,讓程式碼更簡潔。

範例

public class IfElse2 {
  static int test(int testval, int target) {
    if(testval > target)
      return +1;
    else if(testval < target)
      return -1;
    return 0; // Match
  }
  public static void main(String[] args) {
    System.out.println(test(10, 5));
    System.out.println(test(5, 10));
    System.out.println(test(5, 5));
  }
} /* Output:
1
-1
0
*/

在這個例子中,test() 方法比較兩個數值:

  • 如果 testval 大於 target,返回 +1
  • 如果 testval 小於 target,返回 -1
  • 如果兩者相等,返回 0

透過使用 return,我們可以在條件滿足時立即結束方法,無需使用 else 包裹後續的程式碼。

  • 注意:在返回 void 的方法中,如果沒有明確的 return 語句,Java 會在方法結束處隱式地添加一個 return

break 和 continue

這兩個語句用於控制迴圈的執行流程。

break 語句

break 用於立即退出迴圈,不再執行後續的迭代。

continue 語句

continue 用於跳過當前的迭代,直接開始下一次迭代。

範例

public class BreakAndContinue {
  public static void main(String[] args) {
    for(int i = 0; i < 100; i++) {
      if(i == 74) break; // Out of for loop
      if(i % 9 != 0) continue; // Next iteration
      System.out.print(i + " ");
    }
    System.out.println();
    // Using foreach:
    for(int i : range(100)) {
      if(i == 74) break; // Out of for loop
      if(i % 9 != 0) continue; // Next iteration
      System.out.print(i + " ");
    }
    System.out.println();
    int i = 0;
    // An "infinite loop":
    while(true) {
      i++;
      int j = i * 27;
      if(j == 1269) break; // Out of loop
      if(i % 10 != 0) continue; // Top of loop
      System.out.print(i + " ");
    }
  }
} /* Output:
0 9 18 27 36 45 54 63 72
0 9 18 27 36 45 54 63 72
10 20 30 40
*/
  • 第一個迴圈:遍歷 099,當 i 等於 74 時,用 break 跳出迴圈。使用 continue 跳過不能被 9 整除的數字,僅輸出能被 9 整除的數字。
  • 第二個迴圈:功能與第一個相同,但展示了另一種寫法。
  • 無限迴圈while(true) 創建一個無限迴圈,直到 j 等於 1269 時,用 break 結束迴圈。continue 用於跳過 i 不能被 10 整除的情況,僅輸出能被 10 整除的 i 值。

switch 語句

switch 語句提供了一種簡潔的方法來根據變數的值執行不同的程式碼區塊。

語法

switch (intergralSelector) {
    case integralValue1 : statement; break;
    case integralValue2 : statement; break;
    case integralValue3 : statement; break;
    case integralValue4 : statement; break;
    // ...
    default: statement;
}
  • intergralSelector:一個能產生整數值的表達式,常見類型有 intchar
  • switch 會將選擇器的結果與每個 case 的值進行比較。
    • 如果匹配,則執行對應的語句。
    • 如果沒有匹配的 case,則執行 default 區塊(如果有的話)。
  • break:用於結束 switch 區塊,防止程式繼續執行後續的 case

注意事項

  • 如果忽略 break,程式會繼續執行後續的 case,直到遇到 breakswitch 結束。
  • 從 Java 5 開始,switch 支援 enum(列舉)類型。
  • 從 Java 7 開始,switch 也支援 String 類型。

範例

public class VowelsAndConsonants {
  public static void main(String[] args) {
    Random rand = new Random(47);
    for(int i = 0; i < 100; i++) {
      int c = rand.nextInt(26) + 'a';
      System.out.print((char)c + ", " + c + ": ");
      switch(c) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u': System.out.println("vowel");
                  break;
        case 'y':
        case 'w': System.out.println("Sometimes a vowel");
                  break;
        default:  System.out.println("consonant");
      }
    }
  }
} /* Output:
y, 121: Sometimes a vowel
n, 110: consonant
z, 122: consonant
b, 98: consonant
r, 114: consonant
n, 110: consonant
y, 121: Sometimes a vowel
g, 103: consonant
c, 99: consonant
f, 102: consonant
o, 111: vowel
w, 119: Sometimes a vowel
z, 122: consonant
...
*/

在這個例子中:

  • 我們使用隨機數生成器產生 100 個隨機的小寫字母。
  • 使用 switch 語句判斷每個字母是否為母音、子音或有時是母音。
    • 當字母為 'a''e''i''o''u' 時,輸出「母音」。
    • 當字母為 'y''w' 時,輸出「有時是母音」。
    • 其他情況,輸出「子音」。

結論

透過掌握這些進階的控制結構,我們可以更有效地控制程式的執行流程,提升程式的可讀性和維護性。希望這篇文章能夠幫助你深入理解 Java 的控制結構,為你的程式設計之路打下更堅實的基礎。