Thinking in Java(3-2) 進階控制結構(Advanced Control Structures)
在學習了基本的控制流程後,讓我們進一步探討 Java 中的進階控制結構,包括 return
、break
、continue
和 switch
語句。這些語句能夠讓我們更靈活地控制程式的執行流程,編寫出更高效的程式。
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
*/
- 第一個迴圈:遍歷
0
到99
,當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:一個能產生整數值的表達式,常見類型有
int
、char
。 switch
會將選擇器的結果與每個case
的值進行比較。- 如果匹配,則執行對應的語句。
- 如果沒有匹配的
case
,則執行default
區塊(如果有的話)。
- break:用於結束
switch
區塊,防止程式繼續執行後續的case
。
注意事項
- 如果忽略
break
,程式會繼續執行後續的case
,直到遇到break
或switch
結束。 - 從 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 的控制結構,為你的程式設計之路打下更堅實的基礎。
Comments ()