6 迴圈

6.1 while 迴圈

6.1.1 while

演算法中重複運算的部分,用 while 敘述,
    while (condition) {
        statements
    }

例題:複利DoublInv.java (原始碼)

6.1.2

注意 while 迴圈主體有可能未被執行, 如

例題: 階乘WhileFac.java (原始碼) 中 n=0 的情形。

6.1.3 一個半迴圈

例題: 極大MaxSal.java (原始碼)
此例利用 ccj 中的類別 Employee

6.2 其他迴圈敘述

6.2.1 for 迴圈

最常見的迴圈形式如,
    i = start;
    while ( i <= end ) {
        ...
        i++;
    }
這種特定的迴圈形式,用 for 表示更為簡潔,如
    for ( i = start; i <= end; i++ ) {
        ...
    }

例題: 改用 for 的階乘Forfac.java (原始碼)

6.2.2 do 迴圈

有時想要至少執行迴圈主體一次,而在執行迴圈主體之後,再做測試。 這時用 do/while 迴圈,
    do {
        statements
    } while (condition);

例題: Sqroot.java (原始碼)

6.2.3 Looping Forever

迴圈
    while (true) {
        statements
    }
不斷地執行主體。 通常在主體中會有測試是否終止的敘述。 例如,
    public static double squareRoot(double a) {
        double xnew = a/2;
        while (true) {
            double xold = xnew;
            xnew = (xold + a/xold) /2;
            if (Numeric.compareDoubles(xnew, xold) == 0) return xnew;
        }
    }

6.3 常見的迴圈形式

6.3.1 讀入資料

    boolean done = false;
    while (!done) {
        read data
        if (Console.in.fail())
            done = true;
        else {
            process data
        }
    }

例題: Words.java (原始碼)

6.3.2 檢查崗哨

採用量值比較,做為測試終止的條件時,該項量值實際不是輸入的資料, 而是做為終止的訊號,稱為 sentinel。

例題:

6.3.3 列出數值表

例題:

6.3.4 字串中各個字元的處理

例題: Reverse.java (原始碼)

6.3.5 收歛

例題: Converge.java (原始碼)
        測試 Converge

6.4 模擬

亂數的產生可用,
    Numeric.randomInt(a,b)       產生 a 和 b 之間的亂整數
    Numeric.randomDouble(a,b)    產生 a 和 b 之間的亂浮點數
例題: Dice.java (原始碼)

6.5 多層迴圈

例題: Table.java (原始碼)

6.6 方塊適用範圍

變數只在所界定的方塊內適用。 例如,
    public static void main(String[] args) {
        ...
        double rate;
        for (...) {
            int year;
            ...
            for (...) {
                double balance;
                ...
            }
            ...
        }
        ...
    }
例題:Grid.java (原始碼)
        測試 Grid