1. 程式人生 > >Java程式設計_迴圈語句(while語句、do-while語句和for語句)

Java程式設計_迴圈語句(while語句、do-while語句和for語句)

迴圈語句

    迴圈語句在程式設計中用來描述有規則重複的流程。在實際的程式中,存在很多需要重複執行的流程,為了簡化這些重複的執行流程,在程式設計語言中新增了該類語句。

    在學習迴圈語句時,最重要的就是發現流程的規律,然後再用程式設計語言將該規律描述出來,從來實現程式要求的流程。

    迴圈語句是流程控制中最複雜,也是最有用、最難掌握的語句,在最初接觸時,首先要熟悉基本的語法,然後需要能夠快速觀察出流程的規律,這個觀察能力需要依靠大量的閱讀和編寫程式進行培養,這就是基本的邏輯思維,然後將該規律描述出來即可。所以在學習迴圈語句時,學習語法只是基本的內容,更多的是培養自己觀察規律的能力,這個才是真正學習迴圈語句時的難點,也是重點。

    本節主要講述迴圈語句的三種語法格式:while語句、do-while語句和for語句。

1、 while語句

    while關鍵字的中文意思是“當……的時候”,也就是當條件成立時迴圈執行對應的程式碼。while語句是迴圈語句中基本的結構,語法格式比較簡單。

    while語句語法格式:

    while(迴圈條件)

    迴圈體;

    為了結構清楚,並且使迴圈體部分可以書寫多行程式碼,一般把迴圈體處理成程式碼塊,則語法格式變為:

    while(迴圈條件){

    迴圈體;

    }

    語法說明:和if語句類似,如果不是用程式碼塊的結構,則只有while後面的第一個語句是迴圈體語句。在該語法中,要求迴圈條件的型別為boolean型別,指迴圈成立的條件,迴圈體部分則是需要重複執行的程式碼。

    執行流程:在執行while語句時,首先判斷迴圈條件,如果迴圈條件為false,則直接執行while語句後續的程式碼,如果迴圈條件為true,則執行迴圈體程式碼,然後再判斷迴圈條件,一直到迴圈條件不成立為止。

    下面結合具體的示例來演示一下while語句的基本使用。首先我們來實現一個無限迴圈,也稱死迴圈,具體程式碼如下:

    while(true){

    System.out.println(‘a’);

    }

    下面講解一下該while語句的執行順序,首先判斷while語句的迴圈條件,條件成立,則執行迴圈體的程式碼,輸出字元a,然後再判別迴圈條件,條件成立,繼續執行迴圈體程式碼,輸出a,再判斷迴圈條件……,依次類推,因為迴圈條件一直成立,所以該程式的功能是一直輸出a,永不停止。

    說明:在控制檯下執行死迴圈的程式,可以按Ctrl+C結束迴圈,在Eclipse中執行死迴圈的程式,可以選擇執行視窗中的紅色按鈕“Terminate”結束程式。

    下面是使用while語句輸出0-9這10個數字,程式實現的原理是使用一個變數代表0-9之間的數字,每次輸出該變數的值,每次對該變數的值加1.變數的值從0開始,只要小於數字10就執行該迴圈。具體的示例程式碼如下:

    int i = 0;

    while(i < 10){

    System.out.println(i); //輸出變數的值

    i++; //變數的值增加1

    }

    其執行流程為:

    1、 執行int I = 0;

    2、 判斷i<10是否成立,如果不成立則結束,否則執行下一步

    3、 輸出變數i的值

    4、 i的值增加1

    5、 跳轉到步驟2繼續執行

    需要注意的是,首先while語句中的條件是迴圈成立的條件,也就是該條件成立則繼續迴圈,所以在書寫時注意。另外,內部程式碼的書寫有順序,同樣是上面的程式碼,如果調整內部程式碼的順序,如下所示:

    int i = 0;

    while(i < 10){

    i++; //變數的值增加1

    System.out.println(i); //輸出變數的值

    }

    則程式的執行結果將變為輸出數字1-10.所以在迴圈語句中,程式碼之間的順序也影響整個程式的邏輯。

    下面是用迴圈實現一個簡單的數學邏輯,求1-10這10個數字的和。程式的原理是這樣:宣告一個變數i,從1變化到10,在宣告一個變數sum,每次和i的值相加以後賦值給自身,下次再使用sum是變化以後的i相加,迴圈結束以後,得到的結果就是數字1-10之間所有數字的和。

    示例程式碼如下:

    int i = 1;      //迴圈變數

    int sum = 0; //數字和

    while(i <= 10){

    sum += i;   //和當前的i值相加

    i++;       //變數i增加1

    }

    這樣,第一次迴圈是把和1相加的結果賦值給sum,然後再使用sum的值和2相加再賦值給sum,依次類推,則得到1-10之間所有變數的和。

    在使用迴圈語句時,發現規律需要的時間比編寫和除錯程式碼需要的時間多得多,所以要善於發現規律,善於思考。

2 、do-while語句

    do-while語句由關鍵字do和while組成,是迴圈語句中最典型的“先迴圈再判斷”的流程控制結構,這個和其它2個迴圈語句都不相同。

    do-while語句的語法格式為:

    do{

    迴圈體;

    }while(迴圈條件);

    語法說明:在do-while語句中,迴圈體部分是重複執行的程式碼部分,迴圈條件指迴圈成立的條件,要求迴圈條件是boolean型別,值為true時迴圈執行,否則迴圈結束,最後整個語句以分號結束。

    執行流程:當執行到do-while語句時,首先執行迴圈體,然後再判斷迴圈條件,如果迴圈條件不成立,則迴圈結束,如果迴圈條件成立,則繼續執行迴圈體,迴圈體執行完成以後再判斷迴圈條件,依次類推。

    實現和while語句實現的類似的示例,則死迴圈的示例程式碼為:

    do{

    System.out.println(‘a’);

    }while(true);實現輸出0-9這10個數字的迴圈為:

    int i = 0;

    do{

    System.out.println(i);   //輸出變數的值

    i++;                 //變數增加1

    }while(i < 10);

    實現求1-10這10個數字的和的程式碼為:

    int i = 1;

    int sum = 0;

    do{

    sum += i; //求和

    i++;      //變數增加1

    }while(i < 10);

    System.out.println(sum);   //輸出和

    同理,實現求5的階乘的程式碼類似,在數學上5的階乘指1×2×3×4×5,數學上規定0的階乘等於1,在實際計算時,階乘的值增加的非常快,所以需要注意結果不能溢位。其具體程式碼為:

    int i = 1;

    int result = 1;

    do{

    result *= i;

    i++;

    }while(i <= 5);

    System.out.println(result);

    在實際的程式中,do-while的優勢在於實現那些先迴圈再判斷的邏輯,這個可以在一定程度上減少程式碼的重複,但是總體來說,do-while語句使用的頻率沒有其他的迴圈語句高

3 、for語句

    for關鍵字的意思是“當…的時候”,是實際開發中比較常用的迴圈語句,其語法格式相對於前面的迴圈語句來說稍顯複雜,但是在熟悉以後,將會發現其語法安排的比較條理,把迴圈控制和迴圈體很清晰的分開。

    for語句的語法格式為:

    for(初始化語句;迴圈條件;迭代語句){

    迴圈體;

    }

    語法說明:

    1、 和其它流程控制語句一樣,語句中的大括號不是語法必須的,但是為了結構清楚以及在迴圈體部分可以書寫多行程式碼,一般使用大括號。

    2、 初始化語句作用是在迴圈開始以前執行,一般書寫變數初始化的程式碼,例如迴圈變數的宣告、賦值等。該語句可以為空。

    3、 迴圈條件是迴圈成立的條件,要求必須為boolean型別,如果該條件為空,則預設為true,即條件成立。

    4、 迭代語句是指迴圈變數變化的語句,一般書寫i++、i—這樣的結構,當然,該語句也可以為空5、 迴圈體指迴圈重複執行的功能程式碼。

    執行流程:

    1、 執行初始化語句

    2、 判斷迴圈條件,如果迴圈條件為false,則結束迴圈,否則執行下一步

    3、 執行迴圈體

    4、 執行迭代語句

    5、 跳轉到步驟2重複執行需要注意的是:for語句中的各個語句都可以為空,初始化語句在for語句執行時執行且只執行一次。

    依據for語句的語法格式,則最簡單的for語句是如下格式:for(;;);由於迴圈條件為空時,預設為true,則迴圈條件恆成立,該迴圈的迴圈體即最後的一個分號,這樣的語句稱作空語句,則該迴圈是一個死迴圈,迴圈體是空語句。

    在實際書寫程式碼時,一般把迴圈控制部分都寫在for語句的小括號內部,而迴圈體只書寫和邏輯相關的程式碼,這種結構使邏輯顯得很清晰。

    使用for語句輸出的0-9之間數字的程式碼如下:

    for(int i = 0;i < 10;i++){

    System.out.println(i);

    }

    則該語句的執行流程為:

    1、 執行int i = 0;

    2、 判斷i<10,如果條件不成立則結束,否則繼續執行下一步

    3、 執行System.out.println(i);

    4、 執行i++

    5、 跳轉到步驟2繼續執行類似的示例程式碼,實現求1-100之間數字的和,程式碼如下:

    int sum = 0;

    for(int i = 1;

    i <= 100;i++){

    sum +=i;

    }

    System.out.println(sum);

    這些是一些基本的for語句的使用,在通常情況下,for語句和while語句之間可以實現很簡單的轉換,例如下面是一個使用for語句書寫的while格式的程式碼:

    int i = 0;for(;i < 10;){

    System.out.println(i);

    i++;

    }關於for語句的深入使用請參看後續的綜合示例部分的講解。

小結

    這裡介紹了基本的迴圈控制語句的語法格式,在程式設計時,必須理解每種語句的語法格式和對應的特點,才能在實際使用時依據自己的邏輯進行靈活運用。

    和前面的條件語句一樣,在實際使用時,迴圈控制語句之間也可以進行相互的巢狀來解決複雜的邏輯,在語法上對於巢狀的層次沒有限制。

    while語句和for語句在迴圈語句中屬於“先判斷再迴圈”的結構,而do-while語句屬於“先迴圈再判斷”的結構,所以從語法角度來看,do-while語句的迴圈體至少會執行一次,在實際使用時while語句和for語句之間可以進行很方便的替換。