2015年7月1日 星期三

10 流程控制(2)

10   流程控制(2)
【迴圈流程控制(Loop Control Flow)
[while迴圈]
先判斷再執行。合乎expression時執行statements,否則跳出。
格式:
while (expression)
    {statements;}

[範例]
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




[do while迴圈]
先執行再判斷。執行後判斷合乎expression時,則繼續執行statements,否則跳出。
格式:
do
   {statements;}
while (expression);

[範例]
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





[for 迴圈]
格式:
for (expr1;expr2;expr3;)
    {statements;}
expr1:初期值   expr2:條件式   expr3:遞增或遞減
合乎exp2時執行,否則跳出。
exp1內可自訂for迴圈專用變數,如 int x = 1,但不得使用於迴圈外。
[範例]
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]
break:跳出迴圈
continue:跳出該次迴圈,繼續執行
[範例]                           
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

[範例]
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



[範例: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




依序指派陣列值。
格式:
for(資料型別 變數名:陣列名)

[範例]
使用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

沒有留言:

張貼留言