12   流程控制(2)-迴圈流程控制

迴圈流程控制(Loop Control Flow)

合乎某種條件時,重複執行一段程式敘述,是謂迴圈流程控制。

 

[12-1 while迴圈]

先判斷再執行。合乎expression時執行statements,否則跳出。

格式:

while (expression)

   {statements;}

 

<while迴圈範例>

class While1 {

   public static void main (String[] args) {

     int loop1 = 1;

 

 while (loop1 <= 3) {

     System.out.println("loop1= " + loop1);

     loop1++;

     }

  }

}

執行結果:C:\js>java While1

loop1= 1

loop1= 2

loop1= 3

 

 

[12-2 do while迴圈]

先執行再判斷。執行後判斷合乎expression時,則繼續執行statements,否則跳出。

格式:

do

   {statements;}

while (expression);

 

<do while迴圈範例]>

class Dowhile1 {

   public static void main (String[] args) {

     int x = 1;

 

     do {

            System.out.println("x = " + x);

            x++;

          }

    while (x <= 3);

  }

}

執行結果:C:\js>java Dowhile1

x = 1

x = 2

x = 3

 

 

[12-3 for 迴圈]

格式:

for (expr1;expr2;expr3;)

   {statements;}

expr1:初期值   expr2:條件式   expr3:遞增或遞減

合乎exp2時執行,否則跳出。

exp1內可自訂for迴圈專用變數,如 int x = 1,但不得使用於迴圈外。

 

<for 迴圈範例>

class For1 {

   public static void main (String[] args) {

     int m;

     for(m=1; m<=3; m++) //或合併上一行for(int m=1;m<=3;m++)

       System.out.println("m = " + m);

}

}

執行結果:C:\js>java For1

m = 1

m = 2

m = 3

 

 

<會編譯錯誤之程式片段>

1.

for(int m=1;m<=3;m++)

System.out.println("m="+m);

System.out.println("m="+m);   //迴圈外,不得使用在迴圈內宣告之變數m

 

2.

for(int m=1;m<=3;m++){

System.out.println("m="+m);

break;    // break後不繼續執行m++

}

 

 

breakcontinue

迴圈中可置入breakcontinue,其意義如下:

break:跳出迴圈

continue:跳出該次迴圈,繼續執行

 

<break範例>

class Break1 {

   public static void main (String[] args) {

     int x;

     for(x=1; x<=5; x++) {

       if(x==3)

         break;

       System.out.println("x= " + x);

     }

  }

}

執行結果:C:\js>java Break1

x= 1

x= 2

 

< continue範例>

class Continue1 {

   public static void main (String[] args) {

     int x;

 

     for(x=1; x<=5; x++) {

       if(x==3)

         continue;

       System.out.println("x = " + x);

      }

   }

}

執行結果:C:\js>java Continue1

x = 1

x = 2

x = 4

x = 5

 

 

迴圈標籤

breakcontinue可使用迴圈標籤作為執行標的,標籤須放置於各層迴圈的起始行的行首位置,標籤名稱後須以「:」結尾,下面以範例說明之。

 

<範例:break與迴圈標籤>

跳出該標籤之迴圈。

class Break2 {

public static void main (String[] args) {

      int x, y;

 

L1:   for(x=1; x<=2; x++) {

             System.out.println("x = " + x);

L2:     for(y=1; y<=5; y++) {

             if(y==3)

               break L2;

             System.out.println("y = " + y);

         }

       }

     }

}

執行結果:C:\js>java Break2

x = 1

y = 1

y = 2

x = 2

y = 1

y = 2

 

 

<範例:continue與迴圈標籤>

跳出該標籤之該次迴圈。

class Continue2 {

   public static void main (String[] args) {

     intx, y;

 

L1:   for(x=1; x<=2; x++) {

              System.out.println("x = " + x);

L2:     for(y=1; y<=5; y++) {

                if(y==3)

                   continue L2;

                System.out.println("y = " + y);

          }

       }

}

}

執行結果:C:\js>java Continue2

x = 1

y = 1

y = 2

y = 4

y = 5

x = 2

y = 1

y = 2

y = 4

y = 5

 

 

<範例:標籤之錯誤應用>

只可置於迴圈前端,否則會有編譯錯誤。

class Break3 {

   public static void main (String[] args) {

       int x;

 

L1:  x=1;

       for(x=1; x<=5; x++) {

            if(x==3)

               break L1;

            System.out.println("x = " + x);

       }

}

}

編譯結果:C:\js>javac Break3.java

break3.java:8: error: undefined label: L1

         break L1;

         ^

1 error

 

 

[12-4 foreach]

依序指派陣列值給變數,每次給予陣列值時須執行的程式敘述置於其下。

格式:

for(資料型別變數名:陣列名)

 

<範例for迴圈與for each的比較>

使用foreachnumberarray陣列之元素0~9依序指派給numout並印出。

 

class NumberPrint{

   public static void main(String[] args){

     int numberarray[] = {1,3,5,7,9,11,13,15,17,19};

     for(int i=0;i<10;i++) //使用for迴圈列印陣列內容

       System.out.print(numberarray[i]+(" "));

     System.out.println("");

 

     System.out.println("另一種方法-foreach");

     for(int numout:numberarray) //使用foreach列印陣列內容

       System.out.print(numout+(" "));

     System.out.println("");

   }

}

執行結果:C:\js>java NumberPrint

1 3 5 7 9 11 13 15 17 19

另一種方法-foreach

1 3 5 7 9 11 13 15 17 19

arrow
arrow
    創作者介紹
    創作者 祈泊 的頭像
    祈泊

    祈泊的部落格

    祈泊 發表在 痞客邦 留言(0) 人氣()