迴圈控制(二)
1 while loop
可以想像成把for loop ( )內的三個判斷式,分別拆開來使用
只要記住下方三個步驟
- 變數初始值設定
- 條件式
- 變數遞增
此處一樣用列出小於10的偶數這題做例題,請一定要滑上去對照看看while迴圈與for迴圈的差異性
1-1 while loop
while( BooleanStatement ){
....
//通常此處會放有 變數遞增程式碼
}
//PURPOSE:列出小於10的偶數
int i=1;//請一定要給變數一個初始值,才可以進行i++
while(i<=10){//繼續執行的條件式
if(i%2==0){
System.out.println(i);
}
i++;//變數遞增
}
System.out.println("i最後的值="+i);
----------------------
2
4
6
8
10
i最後的值=11
比較需要注意的是,許多人認為 i 最後的值應該會是10,但執行順序是
( i=10 ) => (進行i++ ) =>( i=11 ) => (判斷符不符合i<=10條件,發現不符合於是跳出迴圈 )
所以 i 最後的值會是11
1-2 do while
do{
...
}while( BooleanStatement );
do while與while do最不一樣的地方,就在於do while至少會執行一次
請注意最後一定要加 ;
//PURPOSE:列出小於10的偶數
int i=1;
do{
if(i%2==0){
System.out.println(i);
}
i++;
}while(i<=10);
System.out.println("i最後的值="+i);
------------------------
2
4
6
8
10
i最後的值=11
1-3 巢狀while
變數1 初始設定
while( 判斷式1 ){
變數2 初始設定
while( 判斷式2 ){
變數2++;
}
變數1++;
}
//PURPOSE:99乘法表
int i=1,j=1;
while(i<=9){
j=1; //此行非常的重要!請一定要記得,內層迴圈重新跑過之後,還是要給他一個初值,可以試試看沒有它結果會變成如何
while(j<=9){
System.out.println(i+"X"+j+"="+i*j);
j++;
}
System.out.println("");
i++;
}
----------------------------------------
1X1=1
1X2=2
1X3=3
1X4=4
1X5=5
1X6=6
1X7=7
1X8=8
1X9=9
2X1=2
2X2=4
......以下省略
1-4 常用簡略的while寫法 ( 將 增值 與 判斷式 寫在一起 )
//PURPOSE:列出小於10的偶數
int i=0;
while((i++)<=9){
if(i%2==0){
System.out.println(i);
}
}
------------------
2
4
6
8
10
i最後的值=11
2 break與continue
2-1 break
break執行時,最靠近break的迴圈將會終止運作,跳到迴圈下一行程式
Scanner scanner =new Scanner(System.in);
int score;
while(true){
System.out.print("請輸入程式設計成績(輸入-1結束):");
score=scanner.nextInt();
if(score==-1){
break; }
else if(score>=90){
System.out.println("甲");
}
else if(score>=80){
System.out.println("乙");
}else if(score>=70){
System.out.println("丙");
}else{
System.out.println("丁");
}
}
--------------------------------------
請輸入程式設計成績(輸入-1結束):100
甲
請輸入程式設計成績(輸入-1結束):80
乙
請輸入程式設計成績(輸入-1結束):50
丁
請輸入程式設計成績(輸入-1結束):-1
如果有思考過就可以發現,這一題還可以不要使用break來寫,可以直接用while裡面的判斷式來控制,但這題為什麼要選擇前者而不是後者呢?希望學生可以思考看看
2-2 continue
最靠近continue的迴圈會立刻跳至迴圈最開始處,continue下方程式碼將不會被執行到
迴圈依舊在進行中沒有被終結,只是某一圈continue以下的程式碼被跳掉了
//PURPOSE:列出小於10的偶數
for(int i=1;i<=10;i++){
if(i%2!=0){
continue;
}
System.out.println(i);
}
-------------------------
2
4
6
8
10
我們介紹了很多不同的寫法來列出小於10的偶數,你認為哪種寫法最好呢?請提出原因
2-3 搭配label來使用break與continue
break與continue執行的範圍將不再是最靠近牠們的迴圈,而是被label 包起來的所有程式碼
LabelName : {
....
continue LabelName;
break LabelName;
}
label:{
for(int i=1;i<=10;i++){
if(i==3){
break label;
}
System.out.println(i);
}
System.out.println("for迴圈結束了"); //如果上面只有break;的話,這行會被列印出來
}
}
----------------------------------
1
2
2-4 for loop與while loop應該如何取捨?
- 重複次數明確 選用for
- 例如從1執行到100
- 重複次數不明確 選用while
- 例如輸入-1就終結,預先無法知道他可能會跑幾圈
一般情況下,當使用for或while迴圈不會有太大差異時,建議初學者選擇使用for迴圈,for迴圈主要設定都被縮減在一行內,比較不會因為漏寫而造成無窮迴圈的情況。