Thinking in Java(3-1) 控制流程(Controlling Execution)
在學習 Java 程式設計時,瞭解如何控制程式的執行流程是非常重要的。這篇文章將介紹 Java 中的條件語句和迴圈結構,幫助初學者掌握程式的控制邏輯。
true 和 false
所有的條件語句都利用條件表達式的 true
或 false
來決定執行路徑。
- 嚴格的布林值:在 Java 中,不允許使用數字作為
boolean
值。- 相較於其他一些語言,例如 C 語言,其中
false
被定義為0
,true
為任何非0
數值。 - 如果要在 Java 中使用非
boolean
值作為條件,如if(a)
,則必須通過條件表達式將其轉換為boolean
,例如if(a != 0)
。
- 相較於其他一些語言,例如 C 語言,其中
if-else 語句
以下是 Java 中使用 if-else
結構的基本語法:
if (BooleanExpression)
statement
// 或
if (BooleanExpression)
statement
else
statement
提示:語句
指的是任何有效的 Java 單行執行語句。
實際應用示例
public class IfElse {
static int result = 0;
static void test(int testval, int target) {
if(testval > target)
result = +1;
else if(testval < target)
result = -1;
else
result = 0; // Match
}
public static void main(String[] args) {
test(10, 5);
System.out.println(result);
test(5, 10);
System.out.println(result);
test(5, 5);
System.out.println(result);
}
} /* Output:
1
-1
0
*/
在這個範例中,test()
方法比較兩個數字並設定 result
的值,main()
方法則測試不同的情況。
迭代(Iteration)
迭代是指在程式中重複執行某些語句,直到控制條件的布林表達式為 false
時停止。
while 迴圈
while
迴圈在每次迭代前都會檢查布林條件,只要條件為 true
,就會執行迴圈內的語句。
語法
while(Boolean-expression)
statement
範例
以下是一個使用 while
迴圈的實際範例:
public class WhileTest {
static boolean condition() {
boolean result = Math.random() < 0.99;
System.out.print(result + ", ");
return result;
}
public static void main(String[] args) {
while(condition())
System.out.println("Inside 'while'");
System.out.println("Exited 'while'");
}
}
condition()
方法產生一個隨機數並檢查是否小於0.99
。如果是,則返回true
,迴圈繼續執行,並印出「迴圈內執行」。- 當隨機數達到或超過
0.99
,condition()
返回false
,迴圈結束,然後印出「迴圈結束」。
do-while 迴圈
do-while
迴圈是一種後測迴圈,即使條件初始不成立,迴圈內的語句也會至少被執行一次。
語法
do
statement
while (BooleanExpression);
範例
public class DoWhileExample {
public static void main(String[] args) {
int count = 0;
do {
System.out.println("Count is: " + count);
count++;
} while (count < 5);
}
}
在這個範例中:
do
區塊內的語句首先執行一次。- 然後根據
while
條件表達式(count < 5
)檢查是否需要繼續迴圈。 - 因為
count
從0
開始,迴圈會執行五次,每次都會印出count
的值。
for 迴圈
for
迴圈是最常用於迭代的結構,用於在已知迭代次數的情況下執行程式碼。
語法
for (initialization; BooleanExpression; step)
statement
- initialization:設定迴圈起始的狀態,只在迴圈開始前執行一次。
- BooleanExpression:每次迭代前檢查的條件,決定是否繼續執行迴圈。
- step:每次迭代後執行的語句,用於更新迴圈變數。
三個部分都可以留空,這提供了需要時的靈活性。
範例
public class ListCharacters {
public static void main(String[] args) {
for(char c = 0; c < 128; c++)
if(Character.isLowerCase(c))
System.out.println("value: " + (int)c + " character: " + c);
}
} /* Output:
value: 97 character: a
value: 98 character: b
value: 99 character: c
value: 100 character: d
value: 101 character: e
value: 102 character: f
value: 103 character: g
value: 104 character: h
value: 105 character: i
value: 106 character: j
...
*/
這段程式碼示範了遍歷 ASCII 字符集中的小寫字母,並輸出其整數值和字符形式。
逗號運算子
在 Java 中,唯一使用逗號運算子的地方是 for
迴圈的三個部分,可以使用逗號來包含多個語句,這些語句會按順序執行。
範例
public class CommaOperator {
public static void main(String[] args) {
for(int i = 1, j = i + 10; i < 5; i++, j = i * 2) {
System.out.println("i = " + i + " j = " + j);
}
}
} /* Output:
i = 1 j = 11
i = 2 j = 4
i = 3 j = 6
i = 4 j = 8
*/
在這個例子中,我們同時追蹤兩個變數 i
和 j
,並在每次迭代中更新它們的值。
foreach 迴圈
Java SE5 引入了一種更簡潔的 for
語法,專為陣列和集合設計,稱為增強型 for
迴圈或 foreach
迴圈。
- 無需手動建立和管理索引變數,迴圈會自動遍歷所有元素。
語法
for (元素類型 變數 : 陣列或集合) {
語句;
}
範例
public class ForEachFloat {
public static void main(String[] args) {
Random rand = new Random(47);
float f[] = new float[10];
for(int i = 0; i < 10; i++)
f[i] = rand.nextFloat();
for(float x : f)
System.out.println(x);
}
} /* Output:
0.72711575
0.39982635
0.5309454
0.0534122
0.16020656
0.57799757
0.18847865
0.4170137
0.51660204
0.73734957
*/
在這個範例中:
- 首先,我們生成一個包含 10 個隨機浮點數的陣列
f
。 - 然後,使用
foreach
迴圈遍歷陣列中的每個元素,並將其輸出。 - 在
foreach
迴圈中,變數x
會自動被賦值為陣列f
中的每一個元素。
結論
瞭解和掌握這些控制流程的語句對於編寫有效的 Java 程式至關重要。無論是條件判斷還是迴圈結構,都可以幫助我們控制程式的執行邏輯,實現更複雜的功能。
希望這篇文章能夠幫助初學者更好地理解 Java 的控制流程結構,為進一步的學習打下堅實的基礎。
Comments ()