迴圈結構 迴圈結構完成的功能是迴圈執行某段代碼多次。 迴圈結構可以使用for迴圈、for-each迴圈、while迴圈和do-while迴圈。
1. for迴圈 for迴圈的基本結構如下:for(運算式1;運算式2;運算式3){ //迴圈體} 運算式1用於初始化,在整個迴圈過程只執行一次;運算式2的結果應該為邏輯值,決定是否迴圈,如果為true,則繼續迴圈,如果為false,則結束迴圈;運算式3在每次迴圈完成之後執行,主要的作用是修改迴圈變數,迴圈多少次就會執行多少次;迴圈體就是要迴圈執行的部分。如果迴圈體只有一行代碼,迴圈體的大括弧可以省略。 執行的具體過程如下:(1) 首先執行運算式1,進行初始化;(2) 然後執行運算式2,如果結果為true,執行第(3)步,如果結果為false,執行第(5)步;(3) 執行迴圈體;(4) 執行運算式3,轉向運算式2;(5) 結束 從這個過程可以看出,運算式2à迴圈體à運算式3形成了一個迴圈,運算式1僅僅在迴圈之前來完成初始化,運算式2決定是否迴圈,下面看一個例子。 例:求1到100這100個數的和。 分析:如果人工計算可以這樣來做1+2+3+4+……當然這樣寫讓電腦做也可以,但是如果計算1到10000這10000個數的和怎麼辦呢?寫起來太累了,所以不能這樣來寫。可以這樣想,計算1到100這些數位和,可以這樣理解:剛開始“和”為0,第一次把1加到“和”上,第二次把2加到“和”上,第三次把3加到“和”上……加到100為止,最終就得到這個“和”了。相當於每次都向“和”上加一個數字,重複做100次,不同的是每次加的值不一樣,這樣可以設定一個變數,然後每次在計算之後修改這個變數的值就可以了,假設這個變數為i,可以先讓i等於1,執行完之後,讓i等於2……這樣就可以使用for迴圈來完成了。 首先需要定義一個“和”,這裡使用sum,初始值為0,可以這樣寫: int sum = 0; 然後定義變數i,每次迴圈的時候使用: int i; 剛開始i等於1,這個可以通過迴圈結構中的運算式1完成,運算式1完成的就是初始化任務,所以運算式1可以寫成: i=1; 迴圈中要完成的工作就是把i添加到和上,所以迴圈體應該這樣寫: sum = sum + i; 每次迴圈完之後,需要改變i的值,怎麼改變呢?從1到100,1用完了是2,2用完了是3,每次都是在原來的基礎上加1,每次迴圈完之後都要改變i的值,所以可以使用運算式3,運算式3就是在完成迴圈之後執行的。所以運算式3可以寫成: i++; 後一個問題,就是迴圈到什麼時候呢?要計算1到100的和,所以當i<=100時需要把i加到“和”上,如果i>100,就不需要再迴圈了,所以迴圈的條件是i<=100,運算式2用於控制迴圈是否繼續,所以運算式2的內容就可以寫成: i<=100 這樣迴圈結構的幾個部分都有了,所以得到下面的代碼:【例】// ForTest.javapublic class ForTest { public static void main(String[] args) { // sum儲存和 int sum = 0; // i表示迴圈變數 int i; // i=0完成迴圈變數的初始化,i<=100表示迴圈的條件, // i++修改迴圈變數的值 for(i=0;i<=100;i++){ // 迴圈體 sum+=i; } System.out.println("和為:"+sum); }}運行結果為:和為:5050 在使用for迴圈的時候,必須明確幾點:(1) 要迴圈執行哪些語句,也就是迴圈體;(2) 迴圈的初始狀態是什麼,也就是運算式1的內容;(3) 每次迴圈的區別在什麼地方,如何修改這些變化的內容,也就是運算式3的內容的確定;(4) 確定迴圈的條件,迴圈到什麼時候為止,也就是運算式2的內容。上面介紹的是最一般的情況,可能會出現下面的一些特殊情況:(1) 運算式1用於初始化,並且只執行一次,所以可以認為與迴圈無關,可以把初始化放在迴圈之前完成,這樣就會形成下面的結構:運算式1 for(;運算式2;運算式3) { //迴圈體}這樣上面的求和代碼可以變成下面的代碼(main方法中的部分): int sum = 0; int i; i=0; // 運算式1是一個空,但是分號不能省略 for(;i<=100;i++) sum+=i; System.out.println("和為:"+sum);(2) 每次迴圈之後使用運算式3修改迴圈變數的值,只要迴圈一次,運算式3就會執行一次,所以可以把運算式3放在迴圈體的裡面,效果是完全相同的,所以就有了下面的格式: for(運算式1;運算式2;) { //迴圈體運算式3}上面的代碼可以改成下面的樣子了: int sum = 0; int i; for(i=0;i<=100;) { sum+=i; i++; } System.out.println("和為:"+sum);(3) 運算式2也可以省略,如果省略,迴圈就沒有條件,迴圈也就不會在這裡結束,相當於運算式2的值為true。那麼怎麼讓迴圈停止呢?可以在迴圈體內結束迴圈,使用後面將要講到的break。可以把for迴圈改成下面的格式: for(運算式1;;運算式3) { if(!運算式2) break;//迴圈體} 【注意】因為原來運算式2是迴圈的條件,而現在需要的是結束迴圈的條件,所以需要對錶達式2取反。 按照這種結構,上面的代碼可以變成: int sum = 0; int i; for(i=0;;i++) { if(!(i<=100)) break; sum+=i; } System.out.println("和為:"+sum);(4) 最典型的情況是3個運算式全部省略,形成下面的結構: 運算式1 for(;;) { if(!(運算式2)) break;//迴圈體運算式3}上面的代碼也就變成了: int sum = 0; int i; i=0; for(;;) { sum+=i; i++; if(i>100) break; } System.out.println("和為:"+sum);【注意】(1) 不管怎麼變化,for迴圈中用於分割3部分的分號不能少。(2) for()括弧後不能加分號,如果加了,相當於迴圈體是空語句。下面是for迴圈的8種形式:n for(運算式1;運算式2;運算式3){…}n for(;運算式2;運算式3){…}n for(運算式1;;運算式3){…}n for(運算式1;運算式2;){…}n for(;;運算式3){…}n for(;運算式2;){…}n for(運算式1;;){…}n for(;;){…}
2. while迴圈 while迴圈的作用與for迴圈基本相同,只是結構不一樣。 基本結構如下: while(運算式1) { //迴圈體 } 這個結構與for迴圈體中省略初始化部分和修改迴圈狀態部分之後的結構基本相同,運算式1是迴圈的條件,與for迴圈中的運算式2的作用相同。這個結構更容易理解,只要運算式1的值為true,就執行迴圈體,否則,結束迴圈。運算式1的值會隨著迴圈體的執行而發生變化,否則要麼死迴圈,要麼一次也不執行。所以這裡的迴圈體相當於for迴圈中的迴圈體與修改迴圈狀態的部分。 例:假設1到n的和最接近10000,求n。 分析:1到2的和是3,1到3的和是6,1到4的和是10,隨著n的增加越來越接近10000,但是當和接近10000的時候,再增加的話就又遠離10000,所以迴圈結束的條件就是這個和與10000之間的距離最小。如果距離沒有達到最小,則繼續迴圈。 首先需要定義和,定義差值,定義迴圈變數,並進行初始化: 表示和 int sum = 0; 表示原來的差距 int dis1 = 10000; 表示新的差距 int dis2 = 10000; int i=1; 然後要明確迴圈的內容: sum = sum+i; dis1 = dis2; dis2 = 10000-sum; if(dis2<0) dis2=sum-10000; i++; 然後定義迴圈結束的條件: dis2<=dis1 根據以上的分析,得到下面的代碼:【例】// WhileTest.javapublic class WhileTest { public static void main(String[] args) { // 表示和 int sum = 0; // 表示上次和與10000的差值 int dis1 = 10000; // 表示這次和與10000的差值 int dis2 = 10000; // 迴圈變數 int i=1; while(dis1>=dis2) { sum = sum+i; dis1 = dis2; dis2 = 10000-sum; if(dis2<0) dis2=sum-10000; i++; } i = i-2; System.out.println(i); } } 啟動並執行結果為:141 【注意】while迴圈的小括弧後也不能加分號。
3. do-while迴圈 與while迴圈基本相同,格式如下:do{ //迴圈體}while(運算式1); 運算式1仍然是迴圈的條件,與while迴圈基本相同,區別有以下兩點:(1) 先迴圈,然後判斷條件,所以至少可以迴圈一次;(2) while(運算式1)後面必須有分號。【例】輸出1到20之間的偶數。// DoWhileTest.javapublic class DoWhileTest { public static void main(String[] args) { int i=1; do { if(i%2==0) System.out.println(i+" "); i++; }while(i<=20); }} while迴圈與do-while迴圈只有第一次迴圈的時候不一樣,後面的過程完全一樣,如果肯定能執行一次的話,兩個的效果是完全一樣的。 for迴圈與while迴圈的區別主要是:for迴圈通常是在知道迴圈次數的時候使用,而while迴圈通常是在不知道迴圈次數的時候使用。
上一講:
第十一講選擇結構
下一講:
第十三講 基本文法練習(看看你會不會出錯) 李緒成 CSDN Blog:http://blog.csdn.net/javaeeteacher 邀請您為好友:http://student.csdn.net/invite.php?u=124362&c=7be8ba2b6f3b6cc5