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++
}
break與continue
迴圈中可置入break與continue,其意義如下:
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
迴圈標籤
break與continue可使用迴圈標籤作為執行標的,標籤須放置於各層迴圈的起始行的行首位置,標籤名稱後須以「:」結尾,下面以範例說明之。
<範例: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的比較>
使用foreach將numberarray陣列之元素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
留言列表