二級JAVA第五章輔導(dǎo):循環(huán)語句

字號:

Java 的循環(huán)語句有for,while 和 do-while 。這些語句創(chuàng)造了我們通常所稱的循環(huán)(loops)。你可能知道,一個循環(huán)重復(fù)執(zhí)行同一套指令直到一個結(jié)束條件出現(xiàn)。你將看到,Java 有適合任何編程所需要的循環(huán)結(jié)構(gòu)。
    5.2.1 while 語句
    while 語句是Java 最基本的循環(huán)語句。當(dāng)它的控制表達(dá)式是真時,while 語句重復(fù)執(zhí)行一個語句或語句塊。它的通用格式如下:
    while(condition) {
    // body of loop
    }
    條件condition 可以是任何布爾表達(dá)式。只要條件表達(dá)式為真,循環(huán)體就被執(zhí)行。當(dāng)條件condition 為假時,程序控制就傳遞到循環(huán)后面緊跟的語句行。如果只有單個語句需要重復(fù),大括號是不必要的。
    下面的while 循環(huán)從10開始進(jìn)行減計數(shù),打印出10行“tick”。
    // Demonstrate the while loop.
    class While {
    public static void main(String args[]) {
    int n = 10;
    while(n > 0) {
    System.out.println("tick " + n);
    n--;
    }
    }
    }
    當(dāng)你運行這個程序,它將“tick”10次:
    tick 10
    tick 9
    tick 8
    tick 7
    tick 6
    tick 5
    tick 4
    tick 3
    tick 2
    tick 1
    因為while 語句在循環(huán)一開始就計算條件表達(dá)式,若開始時條件為假,則循環(huán)體一次也不會執(zhí)行。例如,下面的程序中,對println( ) 的調(diào)用從未被執(zhí)行過:
    int a = 10, b = 20;
    while(a > b)
    System.out.println("This will not be displayed");
    while 循環(huán)(或Java 的其他任何循環(huán))的循環(huán)體可以為空。這是因為一個空語句(null statement) (僅由一個分號組成的語句)在Java 的語法上是合法的。例如,下面的程序:
    // The target of a loop can be empty.
    class NoBody {
    public static void main(String args[]) {
    int i, j;
    i = 100;
    j = 200;
    // find midpoint between i and j
    while(++i < --j) ; // no body in this loop
    System.out.println("Midpoint is " + i);
    }
    }
    該程序找出變量i和變量j的中間點。它產(chǎn)生的輸出如下:
    Midpoint is 150
    該程序中的while 循環(huán)是這樣執(zhí)行的。值i自增,而值j自減,然后比較這兩個值。如果新的值i仍比新的值j小,則進(jìn)行循環(huán)。如果i等于或大于j,則循環(huán)停止。在退出循環(huán)前,i 將保存原始i和j的中間值(當(dāng)然,這個程序只有在開始時i比j小的情況下才執(zhí)行)。正如你看到的,這里不需要循環(huán)體。所有的行為都出現(xiàn)在條件表達(dá)式自身內(nèi)部。在專業(yè)化的Java 代碼中,一些可以由控制表達(dá)式本身處理的短循環(huán)通常都沒有循環(huán)體。
    5.2.2 do-while 循環(huán)
    如你剛才所見,如果while 循環(huán)一開始條件表達(dá)式就是假的,那么循環(huán)體就根本不被執(zhí)行。然而,有時需要在開始時條件表達(dá)式即使是假的情況下,while 循環(huán)至少也要執(zhí)行一次。換句話說,有時你需要在一次循環(huán)結(jié)束后再測試中止表達(dá)式,而不是在循環(huán)開始時。幸運的是,Java 就提供了這樣的循環(huán):do-while 循環(huán)。do-while 循環(huán)總是執(zhí)行它的循環(huán)體至少一次,因為它的條件表達(dá)式在循環(huán)的結(jié)尾。它的通用格式如下:
    do {
    // body of loop
    } while (condition);
    do-while 循環(huán)總是先執(zhí)行循環(huán)體,然后再計算條件表達(dá)式。如果表達(dá)式為真,則循環(huán)繼續(xù)。否則,循環(huán)結(jié)束。對所有的Java 循環(huán)都一樣,條件condition 必須是一個布爾表達(dá)式。下面是一個重寫的“tick”程序,用來演示do-while 循環(huán)。它的輸出與先前程序的輸出相同。
    // Demonstrate the do-while loop.
    class DoWhile {
    public static void main(String args[]) {
    int n = 10;
    do {
    System.out.println("tick " + n);
    n--;
    } while(n > 0);
    }
    }
    該程序中的循環(huán)雖然在技術(shù)上是正確的,但可以像如下這樣編寫更為高效:
    do {
    System.out.println("tick " + n);
    } while(--n > 0);
    在本例中,表達(dá)式“-- n > 0 ”將n值的遞減與測試n是否為0組合在一個表達(dá)式中。它的執(zhí)行過程是這樣的。首先,執(zhí)行-- n 語句,將變量n遞減,然后返回n的新值。這個值再與0比較,如果比0大,則循環(huán)繼續(xù)。否則結(jié)束。
    do-while 循環(huán)在你編制菜單選擇時尤為有用,因為通常都想讓菜單循環(huán)體至少執(zhí)行一次。下面的程序是一個實現(xiàn)Java 選擇和重復(fù)語句的很簡單的幫助系統(tǒng):
    // Using a do-while to process a menu selection
    class Menu {
    public static void main(String args[])
    throws java.io.IOException {
    char choice;
    do {
    System.out.println("Help on:");
    System.out.println(" 1. if");
    System.out.println(" 2. switch");
    System.out.println(" 3. while");
    System.out.println(" 4. do-while");
    System.out.println(" 5. for\n");
    System.out.println("Choose one:");
    choice = (char) System.in.read();
    } while( choice < '1' || choice > '5');
    System.out.println("\n");
    switch(choice) {
    case '1':
    System.out.println("The if:\n");
    System.out.println("if(condition) statement;");
    System.out.println("else statement;");
    break;
    case '2':
    System.out.println("The switch:\n");
    System.out.println("switch(expression) {");