官术网_书友最值得收藏!

1.9 循環(huán)結(jié)構(gòu)

在程序設(shè)計中,有時需要反復(fù)執(zhí)行一段相同的代碼,直到滿足一定的條件為止,或者某個條件不再滿足為止。與其他任何計算機語言一樣,Java也提供了循環(huán)結(jié)構(gòu)。

循環(huán)結(jié)構(gòu)一般包含如下四部分內(nèi)容。

(1)初始化部分:用來設(shè)置循環(huán)控制的初始條件,如設(shè)置計數(shù)器初值等。

(2)循環(huán)體部分:反復(fù)執(zhí)行的一段代碼,可以是一條語句,也可以是復(fù)合語句。

(3)迭代部分:用來修改循環(huán)控制條件。一般在本次循環(huán)結(jié)束,下次循環(huán)開始前執(zhí)行。循環(huán)結(jié)構(gòu)的這一部分不能缺少。如果循環(huán)控制條件不改變就會造成死循環(huán),除非使用break這樣的語句跳出循環(huán)。

(4)判斷部分:一般是一個關(guān)系表達式或邏輯表達式,其值用來判斷是否滿足循環(huán)終止條件。每執(zhí)行一次循環(huán)都要對該表達式求值。

下面介紹Java循環(huán)語句while、do…while和for語句。

1.9.1 while循環(huán)

無法得知一個循環(huán)會被重復(fù)執(zhí)行多少次時,可以選擇while循環(huán)。while循環(huán)又稱“當(dāng)型循環(huán)”。while語句的格式如下:

注意:(1)首先初始化控制條件。

(2)當(dāng)循環(huán)條件表達式的值為true時,循環(huán)執(zhí)行循環(huán)體。若某次判斷循環(huán)條件表達式的值為false時,則結(jié)束循環(huán)的執(zhí)行。

(3)while循環(huán)首先計算循環(huán)條件,當(dāng)條件滿足時,才去執(zhí)行循環(huán)體中的語句或代碼塊;如果首次計算循環(huán)條件就不滿足,則循環(huán)體中的語句或代碼塊一次都不會執(zhí)行。

(4)while循環(huán)通常用于循環(huán)次數(shù)不確定的情況,但也可以用于循環(huán)次數(shù)確定的情況。

while循環(huán)流程圖如圖1-28所示。

圖1-28 while循環(huán)流程圖

1.9.2 do…while循環(huán)

do…while語句用來實現(xiàn)“直到型循環(huán)”,采用格式如下:

說明:do…while循環(huán)先執(zhí)行一次循環(huán)體,然后才對循環(huán)條件進行判斷。如果為true,則再次執(zhí)行循環(huán)體,直到循環(huán)條件為false,結(jié)束循環(huán),繼續(xù)執(zhí)行后續(xù)程序。

根據(jù)這樣的執(zhí)行方式,可以發(fā)現(xiàn)無論循環(huán)條件是true還是false,循環(huán)體至少被執(zhí)行一次。另外,如果循環(huán)條件表達式的值開始就為false,那么即使循環(huán)體中不包含對循環(huán)條件的修改,也不會造成死循環(huán)。do…while循環(huán)流程圖如圖1-29所示。

圖1-29 do…while循環(huán)流程圖

1.9.3 for循環(huán)

當(dāng)事先知道了循環(huán)會被重復(fù)執(zhí)行多少次時,可以選擇Java提供的步長型循環(huán)結(jié)構(gòu)for循環(huán)。for循環(huán)語句的格式如下。

說明:(1)for循環(huán)執(zhí)行時,首先執(zhí)行初始化操作,然后判斷循環(huán)條件是否滿足。如果滿足,則執(zhí)行循環(huán)體中的語句,最后執(zhí)行循環(huán)變量修改部分。完成一次循環(huán)后,重新判斷終止條件。

(2)可以在for循環(huán)的初始化部分聲明一個變量,它的作用域為整個for循環(huán)。

(3)for循環(huán)通常用于循環(huán)次數(shù)確定的情況,但也可以根據(jù)循環(huán)結(jié)束條件完成循環(huán)次數(shù)不確定的情況。

(4)在初始化部分和循環(huán)變量修改部分可以使用逗號語句來進行多個操作。例如:

for(i=0,j=10;i<j;i++,j--)

(5)初始化、條件表達式和循環(huán)變量修改部分都可以為空語句,但分號不能省略。例如:

這樣與for(i=1;i<=5;i++)語句是相同的效果。

(6)for循環(huán)與while循環(huán)是可以相互轉(zhuǎn)換的。例如:

for循環(huán)流程如圖1-30所示。

圖1-30 for循環(huán)流程圖

1.9.4 編程實例

【程序1-7】編寫程序,使用while循環(huán)來計算1+2+3+…+100的值。

【分析】while循環(huán)通常用于循環(huán)次數(shù)不確定的時候,在這種情況下,循環(huán)體中通常有更改循環(huán)條件的語句或break語句。此外,while循環(huán)也可用于循環(huán)次數(shù)已知的情況下。相當(dāng)于for循環(huán),while中必須要有讓循環(huán)變量值更改的語句。

本例中是計算累加和,因此存放結(jié)果的變量,其初始值是0。如果是存放累乘的結(jié)果,則初始值應(yīng)該是1,因為1和任何數(shù)相乘都不會更改結(jié)果,而0則不行。

使用while計算累加,如圖1-31所示。

圖1-31 使用while計算累加

【程序1-8】編寫程序,計算1+1/3+1/5+1/7+…+1/(2×n+1)的值。要求使用while循環(huán),且必須計算到1/(2×n+1)小于0.00001時為止。當(dāng)循環(huán)結(jié)束時,顯示上述表達式中n的值,以及表達式的計算結(jié)果。

【分析】根據(jù)題目的要求及題目要完成的計算,應(yīng)該選擇do…while循環(huán)。

使用do…while循環(huán)如圖1-32所示。

圖1-32 使用do…while循環(huán)

【程序1-9】編寫程序,將ASCII碼位于32~126之間的95個字符顯示在屏幕上。為了美觀,要求小于100的碼值前填充一個0,每打印8個字符后換行。

【分析】本題主要包含for循環(huán)、三目運算符、類型強制轉(zhuǎn)換、取余操作這4個知識點。編寫程序時,難度就在于如何控制換行。要在一行打印多項數(shù)據(jù)時,應(yīng)該使用System.out.print而不是System.out.println。當(dāng)需要產(chǎn)生換行時,可以用語句System.out.print("\n");或者System.out.println();。本例要控制換行,可以另外定義一個計數(shù)器變量。但最好的方式就是使用循環(huán)變量來控制換行。因為for循環(huán)是從32循環(huán)到126,只需在循環(huán)變量減去31后能被8整除時,產(chǎn)生一個換行,就能實現(xiàn)題目的要求。此外,對整數(shù)類型,可以強制其類型為字符類型。語法為“char ch=(char)int型變量;”。

打印ASCII編碼如圖1-33所示。

圖1-33 打印ASCII編碼

【程序1-10】通過枚舉求畢業(yè)生人數(shù)和已就業(yè)學(xué)生的人數(shù)。已知某大學(xué)軟件學(xué)院本年度畢業(yè)生的人數(shù)為三百人左右,且學(xué)生就業(yè)率為83.23%。通過for循環(huán),來求出最可能的學(xué)生人數(shù)及已就業(yè)人數(shù)。假定總?cè)藬?shù)三百人左右的描述,是指人數(shù)上下波動在20以內(nèi)。

【分析】本例主要使用for循環(huán),核心語句是for(int i=iNum-iOff+1;i<=iNum+iOff;i++)。實現(xiàn)的思路是對每一個可能的人數(shù)進行列舉,根據(jù)已知的就業(yè)率求出就業(yè)學(xué)生人數(shù),此時要進行四舍五入。再根據(jù)求出的取整后的就業(yè)學(xué)生人數(shù),除以總?cè)藬?shù),得到一個計算出來的就業(yè)率。計算此就業(yè)率和已知值之間的差,和已知值之間相差最小的就是所求的結(jié)果。

注意帶小數(shù)點的數(shù)字,必須以f或者F結(jié)尾,否則會被當(dāng)成雙精度型。

存放某次枚舉時計算得到的就業(yè)率與真實就業(yè)率之間差值的變量fMinDiff,必須賦一個初值。這里先賦了一個在上下文環(huán)境中的最大值1.0。很顯然,在進行第一次比較后,此原始值就會被舍棄。但是,必須賦予一個恰當(dāng)?shù)某踔怠?/p>

【思考】如果賦0.1或是0的初值可以嗎?

通過for循環(huán)進行枚舉如圖1-34所示。

【程序1-11】編寫程序,使用for循環(huán)的嵌套,打印出九九乘法表。

圖1-34 通過for循環(huán)進行枚舉

【分析】注意for循環(huán)嵌套時,外層循環(huán)變量i的取值范圍為1~9,而內(nèi)層循環(huán)變量j的取值范圍為1~i。此外,打印時要在恰當(dāng)?shù)牡胤疆a(chǎn)生換行。

打印乘法表如圖1-35所示。

圖1-35 打印乘法表

主站蜘蛛池模板: 庄浪县| 会宁县| 宜昌市| 进贤县| 潮州市| 秦安县| 昌平区| 汪清县| 鹿泉市| 芷江| 赤城县| 杭锦后旗| 大安市| 阿拉善右旗| 高陵县| 金阳县| 临高县| 玉溪市| 扬州市| 体育| 内江市| 玛曲县| 岳阳市| 若尔盖县| 苏尼特右旗| 沽源县| 滨海县| 永川市| 泰州市| 巫山县| 康保县| 福建省| 仙桃市| 祁连县| 邹城市| 旬邑县| 都匀市| 庄浪县| 许昌市| 长沙县| 广州市|