Thinking in Java(3-1) 控制流程(Controlling Execution)

Thinking in Java(3-1) 控制流程(Controlling Execution)
Photo by orbtal media / Unsplash

在學習 Java 程式設計時,瞭解如何控制程式的執行流程是非常重要的。這篇文章將介紹 Java 中的條件語句和迴圈結構,幫助初學者掌握程式的控制邏輯。

true 和 false

所有的條件語句都利用條件表達式的 truefalse 來決定執行路徑。

  • 嚴格的布林值:在 Java 中,不允許使用數字作為 boolean 值。
    • 相較於其他一些語言,例如 C 語言,其中 false 被定義為 0true 為任何非 0 數值。
    • 如果要在 Java 中使用非 boolean 值作為條件,如 if(a),則必須通過條件表達式將其轉換為 boolean,例如 if(a != 0)

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.99condition() 返回 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)檢查是否需要繼續迴圈。
  • 因為 count0 開始,迴圈會執行五次,每次都會印出 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
*/

在這個例子中,我們同時追蹤兩個變數 ij,並在每次迭代中更新它們的值。

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 的控制流程結構,為進一步的學習打下堅實的基礎。