Java語(yǔ)言同其它大多數(shù)的編程語(yǔ)言一樣,也存在有控制循環(huán)的編程結(jié)構(gòu),它分為不確定循環(huán)和確定循環(huán)兩種類(lèi)型。
一、不確定循環(huán)
所謂不確定循環(huán),也就是我們不能確定循環(huán)所要執(zhí)行的次數(shù),執(zhí)行的次數(shù)是根據(jù)程序中參數(shù)的變化自動(dòng)控制的。
它主要有兩種表現(xiàn)形式:第一種形式是while形式,第二種形式是do/while形式。
1) while
它的英語(yǔ)意思就是“當(dāng)”,它在循環(huán)控制中也可以這樣理解,它的語(yǔ)法格式是:
while(條件)
{
目的一;
目的二;
……
}
換成中文的含義就是“當(dāng)條件為真時(shí),就執(zhí)行循環(huán)體,當(dāng)條件為假時(shí),就不執(zhí)行循環(huán)體。”
下面我們編寫(xiě)一個(gè)比較有意思的程序來(lái)說(shuō)明這個(gè)結(jié)構(gòu):
我的同事小李自從參加工作以后,每個(gè)月都要交納一定的住房基金,以準(zhǔn)備買(mǎi)房子。現(xiàn)在他每個(gè)月工資是2000元,以后每年按10%的比例增加,其中工資的5%是用來(lái)交納住房基金的,他想知道多少年后,他可以有20萬(wàn)元住房基金。
/*while循環(huán)控制結(jié)構(gòu)的測(cè)試*/
public class BuyHouse
{
public static void main(String[] args)
{
final double HOUSEFUND = 200000;
double salary = 2000;
double fund = 0;
int years = 1;
while(fund < HOUSEFUND)
{
fund += salary * 0.05 * 12;
years++
salary = salary * 1.1;
}
System.out.println(“the total years is :” + years);
System.out.println(“the total fund is :” + fund);
}
}
輸出結(jié)果:the total years is :32
The total fund is :218332.10994930082
程序分析:
在開(kāi)始的時(shí)候,我們并不知道需要多少年,但我們知道它的結(jié)束條件,那就是基金需要達(dá)到20萬(wàn)元。我們以它作為程序結(jié)束的條件,進(jìn)行循環(huán)。通過(guò)這個(gè)程序我們可以總結(jié)出以下幾點(diǎn):
1、循環(huán)開(kāi)始執(zhí)行的條件是為真;
2、必須要有使程序結(jié)束的自變量在變化;
3、循環(huán)判斷條件為假時(shí),程序中止循環(huán)。
2)do/while
我們先把前面的程序做一個(gè)改造,來(lái)比較一下兩個(gè)程序的區(qū)別:
/*while循環(huán)控制結(jié)構(gòu)的測(cè)試*/
public class BuyHouse2
{
public static void main(String[] args)
{
final double HOUSEFUND = 200000;
double salary = 2000;
double fund = 0;
int years = 1;
do
{
fund += salary * 0.05 *12;
years++;
salary = salary * 1.1;
}
while(fund < HOUSEFUND);
System.out.println(“the total years is :” + years);
System.out.println(“the total fund is:” + fund);
}
}
輸出結(jié)果:the total years is :32
the total fund is :218332.10994930082
我們?cè)倏磧蓚€(gè)小程序,并對(duì)比一下他們的輸出:
/*測(cè)試不確定循環(huán)的兩種表現(xiàn)形式的區(qū)別*/
public class DifferTest
{
public static void main(String[] args)
{
int i = 2;
do
{
i++;
System.out.println(“the value I is:” + i);
}
while(I < 2);
}
}
輸出結(jié)果:the value i is:3
/*測(cè)試不確定循環(huán)的兩種表現(xiàn)形式的區(qū)別*/
public class DifferTest2
{
public static void main(String[] args)
{
Int i = 2;
while (i < 2)
{
i++;
System.out.println(“the value I is:” + i);
}
}
}
這個(gè)沒(méi)有任何輸出結(jié)果,這兩種形式是有一定差別的:while語(yǔ)句是先進(jìn)行條件判斷,再進(jìn)行循環(huán)體的處理;do/while語(yǔ)句是先進(jìn)行循環(huán)體的處理再判斷條件語(yǔ)句,也就是在執(zhí)行判斷之前已經(jīng)將循環(huán)體內(nèi)的邏輯處理了一遍。
二、確定循環(huán)
for()循環(huán)是最簡(jiǎn)單的循環(huán)語(yǔ)句,它可以通過(guò)計(jì)數(shù)器或在每次循環(huán)后修改某個(gè)類(lèi)似于計(jì)數(shù)器變量的值來(lái)控制它。它的格式如下:
for(初始化表達(dá)式;判斷表達(dá)式;遞增(或遞減)表達(dá)式)
{
執(zhí)行語(yǔ)句;
}
初始化表達(dá)式:它是用來(lái)設(shè)定循環(huán)控制變量的初始值,也就是循環(huán)的起點(diǎn)。
判斷表達(dá)式:用來(lái)判斷循環(huán)是否結(jié)束的表達(dá)式,也就是循環(huán)的終點(diǎn)。程序循環(huán)是否持續(xù)進(jìn)行由判斷表達(dá)式?jīng)Q定;通常判斷表達(dá)式是關(guān)系表達(dá)式,當(dāng)關(guān)系表達(dá)式的值為真是,程序繼續(xù)進(jìn)行循環(huán),當(dāng)關(guān)系表達(dá)式的值為假時(shí),循環(huán)結(jié)束。
遞增(遞減)表達(dá)式:是循環(huán)控制變量的遞增,也可以是遞減。它又稱為循環(huán)控制的步長(zhǎng),也就是每次循環(huán),循環(huán)變量增長(zhǎng)(或減少)的速度。
for()語(yǔ)句的最后不能有任何符號(hào),需要特別注意。
例如:我們向控制臺(tái)輸出1到10之間的數(shù)字。
/*輸出數(shù)字到控制臺(tái)*/
Public class Circle
{
Public static void main(String[] args)
{
For(int I = 1; I < 10; i++)
{
System.out.println(“ ” + i);
}
}
}
輸出結(jié)果:1 2 3 4 5 6 7 8 9 10
針對(duì)于for()循環(huán)控制結(jié)構(gòu),有以下問(wèn)題請(qǐng)讀者注意:
1、如果在初始化表達(dá)式定義了一個(gè)初始化變量,那么該變量的作用域范圍是從循環(huán)開(kāi)始到循環(huán)結(jié)束;
2、如果想在循環(huán)體外部使用循環(huán)計(jì)數(shù)器的最終結(jié)果,應(yīng)該在循環(huán)開(kāi)始外就聲明。
3、在同級(jí)別的不同for()循環(huán)中,可以定義相同名字的變量。
4、在被包含的for()循環(huán)塊內(nèi)不可以定義相同名字的變量。
5、for()循環(huán)與while循環(huán)是完全等價(jià)的。
三、逗號(hào)運(yùn)算符
在Java中逗號(hào)運(yùn)算符的惟一使用場(chǎng)所就是for循環(huán),在初始化循環(huán)變量表達(dá)式或遞增(遞減)表達(dá)式中,我們用一系列逗號(hào)分隔不同的語(yǔ)句,這些語(yǔ)句均參與到循環(huán)控制中。
下面用一個(gè)程序說(shuō)明這個(gè)問(wèn)題
/*逗號(hào)運(yùn)算符*/
public class CommaOperator
{
public static void main(String[] args)
{
for(int i = 1, j = i + 10; i < 5; i++, j = i * 3)
{
System.out.println(“i =” + i + “; j =” + j);
}
}
}
輸出結(jié)果:
i = 1; j = 11
i = 2; j = 6
i = 3; j = 9
i = 4; j = 12
通過(guò)這個(gè)示例,讀者可以發(fā)現(xiàn)初始化變量在開(kāi)始的時(shí)候都是按照初始化表達(dá)式進(jìn)行的,在運(yùn)算的過(guò)程中,都按照步長(zhǎng)控制表達(dá)式進(jìn)行。
四、無(wú)限循環(huán)
提到無(wú)限循環(huán),也就是指沒(méi)有判斷表達(dá)式的for循環(huán),當(dāng)程序進(jìn)入到循環(huán)體內(nèi)的時(shí)候,由于沒(méi)有判斷表達(dá)式來(lái)結(jié)束正常的循環(huán),使得程序進(jìn)入到無(wú)限循環(huán)中,也就是我們平常說(shuō)的死循環(huán)。
我們通過(guò)一個(gè)小例子來(lái)了解一下無(wú)限循環(huán)的表現(xiàn)形式:
/*無(wú)限循環(huán)控制*/
public class Unlimited
{
public static void main(String[] args)
{
for(int i = 1;; i++)
{
System.out.println(“i =” + i);
}
}
}
如果程序進(jìn)入到無(wú)限循環(huán)中,程序就不能正常結(jié)束了,我們只有手動(dòng)結(jié)束程序的進(jìn)程。手動(dòng)結(jié)束進(jìn)程的快捷鍵是Ctrl+C。
posted on 2007-05-16 15:37
心隨Wǒ動(dòng) 閱讀(1429)
評(píng)論(2) 編輯 收藏