隨筆 - 26  文章 - 2  trackbacks - 0
          <2011年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          Java 的循環(huán)語(yǔ)句有for,while 和 do-while 。這些語(yǔ)句創(chuàng)造了我們通常所稱的循環(huán)(loops)。你可能知道,一個(gè)循環(huán)重復(fù)執(zhí)行同一套指令直到一個(gè)結(jié)束條件出現(xiàn)。你將看到,Java 有

          Java 的循環(huán)語(yǔ)句有for,while 和 do-while 。這些語(yǔ)句創(chuàng)造了我們通常所稱的循環(huán)(loops)。你可能知道,一個(gè)循環(huán)重復(fù)執(zhí)行同一套指令直到一個(gè)結(jié)束條件出現(xiàn)。你將看到,Java 有適合任何編程所需要的循環(huán)結(jié)構(gòu)。

           

          5.2.1 while 語(yǔ)句

          while 語(yǔ)句是Java 最基本的循環(huán)語(yǔ)句。當(dāng)它的控制表達(dá)式是真時(shí),while 語(yǔ)句重復(fù)執(zhí)行一個(gè)語(yǔ)句或語(yǔ)句塊。它的通用格式如下:

           

          while(condition) {

          // body of loop

          }

           

           

          條件condition 可以是任何布爾表達(dá)式。只要條件表達(dá)式為真,循環(huán)體就被執(zhí)行。當(dāng)條件condition 為假時(shí),程序控制就傳遞到循環(huán)后面緊跟的語(yǔ)句行。如果只有單個(gè)語(yǔ)句需要重復(fù),大括號(hào)是不必要的。

           

          下面的while 循環(huán)從10開(kāi)始進(jìn)行減計(jì)數(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)你運(yùn)行這個(gè)程序,它將“tick”10次:

           

          tick 10

          tick 9

          tick 8

          tick 7

          tick 6

          tick 5

          tick 4

          tick 3

          tick 2

          tick 1

           

           

          因?yàn)?span>while 語(yǔ)句在循環(huán)一開(kāi)始就計(jì)算條件表達(dá)式,若開(kāi)始時(shí)條件為假,則循環(huán)體一次也不會(huì)執(zhí)行。例如,下面的程序中,對(duì)println( ) 的調(diào)用從未被執(zhí)行過(guò):

           

          int a = 10, b = 20;

           

          while(a > b)

          System.out.println("This will not be displayed");

           

           

          while 循環(huán)(或Java 的其他任何循環(huán))的循環(huán)體可以為空。這是因?yàn)橐粋€(gè)空語(yǔ)句(null statement) (僅由一個(gè)分號(hào)組成的語(yǔ)句)在Java 的語(yǔ)法上是合法的。例如,下面的程序:

           

          // 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的中間點(diǎn)。它產(chǎn)生的輸出如下:

           

          Midpoint is 150

           

          該程序中的while 循環(huán)是這樣執(zhí)行的。值i自增,而值j自減,然后比較這兩個(gè)值。如果新的值i仍比新的值j小,則進(jìn)行循環(huán)。如果i等于或大于j,則循環(huán)停止。在退出循環(huán)前,i 將保存原始i和j的中間值(當(dāng)然,這個(gè)程序只有在開(kāi)始時(shí)i比j小的情況下才執(zhí)行)。正如你看到的,這里不需要循環(huán)體。所有的行為都出現(xiàn)在條件表達(dá)式自身內(nèi)部。在專(zhuān)業(yè)化的Java 代碼中,一些可以由控制表達(dá)式本身處理的短循環(huán)通常都沒(méi)有循環(huán)體。

           

          5.2.2 do-while 循環(huán)

          如你剛才所見(jiàn),如果while 循環(huán)一開(kāi)始條件表達(dá)式就是假的,那么循環(huán)體就根本不被執(zhí)行。然而,有時(shí)需要在開(kāi)始時(shí)條件表達(dá)式即使是假的情況下,while 循環(huán)至少也要執(zhí)行一次。換句話說(shuō),有時(shí)你需要在一次循環(huán)結(jié)束后再測(cè)試中止表達(dá)式,而不是在循環(huán)開(kāi)始時(shí)。幸運(yùn)的是,Java 就提供了這樣的循環(huán):do-while 循環(huán)。do-while 循環(huán)總是執(zhí)行它的循環(huán)體至少一次,因?yàn)樗臈l件表達(dá)式在循環(huán)的結(jié)尾。它的通用格式如下:

           

          do {

          // body of loop

          } while (condition);

           

           

          do-while 循環(huán)總是先執(zhí)行循環(huán)體,然后再計(jì)算條件表達(dá)式。如果表達(dá)式為真,則循環(huán)繼續(xù)。否則,循環(huán)結(jié)束。對(duì)所有的Java 循環(huán)都一樣,條件condition 必須是一個(gè)布爾表達(dá)式。下面是一個(gè)重寫(xiě)的“tick”程序,用來(lái)演示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ù)上是正確的,但可以像如下這樣編寫(xiě)更為高效:

          do {

          System.out.println("tick " + n);

          } while(--n > 0);

           

           

          在本例中,表達(dá)式“-- n > 0 ”將n值的遞減與測(cè)試n是否為0組合在一個(gè)表達(dá)式中。它的執(zhí)行過(guò)程是這樣的。首先,執(zhí)行-- n 語(yǔ)句,將變量n遞減,然后返回n的新值。這個(gè)值再與0比較,如果比0大,則循環(huán)繼續(xù)。否則結(jié)束。

           

          do-while 循環(huán)在你編制菜單選擇時(shí)尤為有用,因?yàn)橥ǔ6枷胱尣藛窝h(huán)體至少執(zhí)行一次。下面的程序是一個(gè)實(shí)現(xiàn)Java 選擇和重復(fù)語(yǔ)句的很簡(jiǎn)單的幫助系統(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 ");

          System.out.println("Choose one:");

          choice = (char) System.in.read();

           

           

          } while( choice < '1' || choice > '5');

           

          System.out.println(" ");

           

          switch(choice) {

           

          case '1':

          System.out.println("The if: ");

          System.out.println("if(condition) statement;");

          System.out.println("else statement;");

           

           

          break;

           

          case '2':

          System.out.println("The switch: ");

          System.out.println("switch(expression) {");

          System.out.println(" case constant:");

          System.out.println(" statement sequence");

          System.out.println(" break;");

          System.out.println(" // ...");

          System.out.println("}");

          break;

           

           

          case '3':

          System.out.println("The while: ");

          System.out.println("while(condition) statement;");

          break;

           

           

          case '4':

          System.out.println("The do-while: ");

          System.out.println("do {");

           

           

          System.out.println(" statement;");

          System.out.println("} while (condition);");

          break;

           

          case '5':

          System.out.println("The for: ");

          System.out.print("for(init; condition; iteration)");

          System.out.println(" statement;");

          break;

           

           

          }

          }

          }

           

           

          下面是這個(gè)程序執(zhí)行的一個(gè)樣本輸出:

           

          Help on:

           

          1. if

          2. switch

          3. while

          4. do-while

          5. for

          Choose one:

          4

          The do-while:

          do {

           

          statement;

          } while (condition);

           

           

          在程序中,do-while 循環(huán)用來(lái)驗(yàn)證用戶是否輸入了有效的選擇。如果沒(méi)有,則要求用戶重新輸入。因?yàn)椴藛沃辽僖@示一次,do-while 循環(huán)是完成此任務(wù)的合適語(yǔ)句。

           

          關(guān)于此例的其他幾點(diǎn):注意從鍵盤(pán)輸入字符通過(guò)調(diào)用System.in.read( ) 來(lái)讀入。這是一個(gè)Java 的控制臺(tái)輸入函數(shù)。盡管Java 的終端 I/O (輸入/輸出)方法將在第12章中詳細(xì)討論,在這里使用System.in.read ( ) 來(lái)讀入用戶的選擇。它從標(biāo)準(zhǔn)的輸入讀取字符(返回整數(shù),因此將返回值choice 定義為字符型)。默認(rèn)地,標(biāo)準(zhǔn)輸入是按行進(jìn)入緩沖區(qū)的,因此在你輸入的任何字符被送到你的程序以前,必須按回車(chē)鍵。

           

          Java 的終端輸入功能相當(dāng)有限且不好使用。進(jìn)一步說(shuō),大多數(shù)現(xiàn)實(shí)的Java 程序和applets (小應(yīng)用程序)都具有圖形界面并且是基于窗口的。因此,這本書(shū)使用終端的輸入并不多。然而,它在本例中是有用的。另外一點(diǎn):因?yàn)槭褂肧ystem.in.read ( ) ,程序必須指定throws java.io.IOException 子句。這行代碼對(duì)于處理輸入錯(cuò)誤是必要的。這是Java 的異常處理的一部分,將在第10章討論。

           

          5.2.3 for 循環(huán)

          在第2章曾使用過(guò)一個(gè)for循環(huán)的簡(jiǎn)單格式。你將看到,for循環(huán)是一個(gè)功能強(qiáng)大且形式靈活的結(jié)構(gòu)。下面是for 循環(huán)的通用格式:

           

          for(initialization; condition; iteration) {

          // body

          }

           

           

          如只有一條語(yǔ)句需要重復(fù),大括號(hào)就沒(méi)有必要。

           

           

          for循環(huán)的執(zhí)行過(guò)程如下。第一步,當(dāng)循環(huán)啟動(dòng)時(shí),先執(zhí)行其初始化部分。通常,這是設(shè)置循環(huán)控制變量值的一個(gè)表達(dá)式,作為控制循環(huán)的計(jì)數(shù)器。重要的是你要理解初始化表達(dá)式僅被執(zhí)行一次。下一步,計(jì)算條件condition 的值。條件condition 必須是布爾表達(dá)式。它通常將循環(huán)控制變量與目標(biāo)值相比較。如果這個(gè)表達(dá)式為真,則執(zhí)行循環(huán)體;如果為假,則循環(huán)終止。再下一步執(zhí)行循環(huán)體的反復(fù)部分。這部分通常是增加或減少循環(huán)控制變量的一個(gè)表達(dá)式。接下來(lái)重復(fù)循環(huán),首先計(jì)算條件表達(dá)式的值,然后執(zhí)行循環(huán)體,接著執(zhí)行反復(fù)表達(dá)式。這個(gè)過(guò)程不斷重復(fù)直到控制表達(dá)式變?yōu)榧佟?

          下面是使用for 循環(huán)的“tick”程序:

           

          // Demonstrate the for loop.

          class ForTick {

          public static void main(String args[]) {

          int n;

           

           

          for(n=10; n>0; n--)

          System.out.println("tick " + n);

          }

          }

           

           

          for 循環(huán)中聲明循環(huán)控制變量

           

          控制for循環(huán)的變量經(jīng)常只是用于該循環(huán),而不用在程序的其他地方。在這種情況下,可以在循環(huán)的初始化部分中聲明變量。例如,下面重寫(xiě)了前面的程序,使變量 n 在for循環(huán)中被聲明為整型:

           

          // Declare a loop control variable inside the for.

          class ForTick {

          public static void main(String args[]) {

           

           

          // here, n is declared inside of the for loop

          for(int n=10; n>0; n--)

          System.out.printl

           

           

           

          本篇文章來(lái)源于 黑基網(wǎng)-中國(guó)最大的網(wǎng)絡(luò)安全站點(diǎn) 原文鏈接:file:///C:/Documents%20and%20Settings/Administrator/桌面/網(wǎng)頁(yè)學(xué)習(xí)資料/java%20循環(huán)語(yǔ)句-知識(shí)-黑基網(wǎng).htm

          posted on 2011-10-09 21:37 Java_liyadong 閱讀(1057) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 阳信县| 城口县| 苍梧县| 广宁县| 杭锦后旗| 上杭县| 大关县| 九龙县| 桑植县| 改则县| 江西省| 邵阳县| 霍林郭勒市| 铜陵市| 阜新| 甘泉县| 平舆县| 平泉县| 武鸣县| 鸡东县| 三原县| 和林格尔县| 神农架林区| 蓬安县| 邯郸县| 逊克县| 临朐县| 宜昌市| 毕节市| 平利县| 奇台县| 刚察县| 东方市| 佛坪县| 治多县| 龙门县| 屏南县| 长治县| 大厂| 水富县| 定远县|