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