While 迴圈
語法 : while(條件式){}
while迴圈如同if(), 都需靠裏面的條件式, 判斷是否進入執行區塊, 但if是在執行完後就跳出, 而while迴圈則是在執行完後, 又回到源頭再判斷一次是否要執行
public static void main(String[] args){ int a=1, total=0; while (a<=100){ total+=a++; } System.out.println("1+2+3+...+100="+total); }
在迴圈內, 可以使用break讓迴圈中斷跳出, 也可以使用continue直接回源頭判斷是否要再進入執行區域
do-while
public static void main(String[] args){
int a=1, total=0;
do{
total+=a++;
}while(a<=100);
System.out.println("1+2+3+...+100="+total);
}
do-while會先進入迴圈執行一次, 再進行判斷, 特別注意的是在while();之後, 要加上 “;” 結束符號
迴圈結構比較 :
while執行0次以上
do/while執行1次以上
for執行一個預先就確定的次數
for迴圈
無論是while或do-while 都必需要有啟始值, 判斷式及步進值. 為了簡化其程序, 故有了for 的語法
for(啟始值;判斷式;步進值){}
第一次迴圈 : 先執行啟始值, 再執行判斷式
第二次及以後 : 先執行步進值, 再執行判斷式
所以, 如果迴圈跑了n次, 則
啟始值 : 1次
判斷式 : n次
步進值 : n-1次
for(int i=1;i<=100;i++){ total+=i; } System.out.println("1+2+3+...+100="+total);
上述之三區段, 並不是一定要填入才行, 也可以變型如下
int a=1, total=0; for(;;){ if (a<=100) total+=a++; else break; } System.out.println("1+2+3+...+100="+total);
巢狀for迴圈
在迴圈之內, 又有迴圈, 可以繼續延伸下去, 如下為九九乘法表之程式碼
public static void main(String[] args){ outloop: for(int i=1;i<=9;i++){ innerloop: for (int j=1;j<=9;j++){ System.out.printf("%2d ", i*j); } System.out.println(); } } 執行結果 : 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
上述的 outloop: 及 innerloop: 只是替迴圈命名, 方便閱讀用的而以, 實際上並沒什麼效益, 一般都省略不寫
for之變型
在for()的三區塊中, 可以使用 “,” 將多個程式碼寫入, 如下
for (int i=0, int j=1;i<100, i<50;i++, j++){}
break與continue
不論是for, while, do-while, 在裏面使用break即立刻跳離迴圈, 遇到continu則馬上回到源頭進行判斷
exam1
列印 1 2 3 4 5 6 7 8 9 public static void main(String[] args) { for (int i=1;i<10;i++){ System.out.printf("%d ", i); } System.out.println(); }
exam2
列印 * * * * * public static void main(String[] args) { for (int i=0;i<5;i++){ System.out.print("* "); } System.out.println(); }
exam3
列印 * * * * * * * * * * * * * * * public static void main(String[] args) { for (int i=0;i<3;i++){ for (int j=0;j<5;j++){ System.out.print("* "); } System.out.println(); } }
exam4
列印 * * * * * * * * * * * * * * * public static void main(String[] args) { for (int i=1;i<=5;i++){ for (int j=1;j<=i;j++){ System.out.print("* "); } System.out.println(); } }
exam5
列印 * * * * * * * * * * * * * * * public static void main(String[] args) { for (int i=5;i>=1;i--){ for (int j=1;j<=i;j++){ System.out.print("* "); } System.out.println(); } } 結果 :
exam6
列印 * * * * * * * * * * * * * * * public static void main(String[] args) { for (int i=1;i<=5;i++){ for (int j=1;j<=5-i;j++){ System.out.print(" "); } for (int j=1;j<=i;j++){ System.out.print("* "); } System.out.println(); } }
exam7
列印 > > > > > < < < < < > > > > > < < < < < > > > > > public static void main(String[] args) { for (int i=1;i<=5;i++){ for (int j=1;j<=5;j++){ if(i%2==1)System.out.print("> "); else System.out.print("< "); } System.out.println(); } }
exam8
列印 A A A A A B B B B B C C C C C A A A A A B B B B B public static void main(String[] args) { for (int i=1;i<=5;i++){ for (int j=1;j<=5;j++){ if(i%3==1)System.out.print("A "); else if (i%3==2)System.out.print("B "); else System.out.print("C "); } System.out.println(); } }
Exam9
< < < < < > > > > > < < < < < > > > > > < < < < < public static void main(String[] args) { for (int i=1;i<=5;i++){ for (int j=1;j<=5;j++){ if(i%2==0) System.out.print("> "); else System.out.print("< "); } System.out.println(); } }
Exam10
A A A A A B B B B B C C C C C A A A A A B B B B B public static void main(String[] args) { for (int i=1;i<=5;i++){ for (int j=1;j<=5;j++){ if(i%3==1) System.out.print("A "); else if (i%3==2) System.out.print("B "); else System.out.print("C "); } System.out.println(); } }
Exam11
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z public static void main(String[] args) { int start=65; for (int i=start;i<start+26;i++){ System.out.printf("%c ", i); } System.out.println(); start=97; for (int i=start;i<start+26;i++){ System.out.printf("%c ", i); } System.out.println(); }
終極密碼
public class Password { public static void main(String[] args) { int pwd=(int)(Math.random()*98)+1; int min=1, max=100; int g=0; Scanner in=new Scanner(System.in); while(true){ System.out.printf("請輸入密碼, 介於 %d ~ %d 間 : ", min, max); g=in.nextInt(); if(g==pwd){ System.out.println("Bingo"); break; } else if (g<pwd)min=g; else max=g; } } } 結果 : 請輸入密碼, 介於 1 ~ 100 間 : 50 請輸入密碼, 介於 1 ~ 50 間 : 25 請輸入密碼, 介於 1 ~ 25 間 : 12 請輸入密碼, 介於 12 ~ 25 間 : 20 請輸入密碼, 介於 20 ~ 25 間 : 22 請輸入密碼, 介於 20 ~ 22 間 : 21 Bingo