Java基礎:第十二講 迴圈結構

來源:互聯網
上載者:User

 

迴圈結構    迴圈結構完成的功能是迴圈執行某段代碼多次。    迴圈結構可以使用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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.