day4 java迴圈結構,day4java迴圈
for迴圈結構:
格式:①初始化條件;②迴圈條件;③迭代條件;④迴圈體
for(①;②;③){ //④}
執行過程:①-②-④-③-②-④-③-。。。-④-③-②,直至迴圈條件不滿足,退出當前的迴圈。
class myfor{ public static void main(String[] args){ for(int i = 0;i<4;i++){ System.out.println("hello java"); } }}
root@debian:/home/jeff/java_coding/day004# java myfor hello javahello javahello javahello java
for迴圈執行過程
class myfor1{ public static void main(String[] args){ int j = 1; for(System.out.print('a');j<4;System.out.print('b'),j++){ System.out.println('c'); } }}
root@debian:/home/jeff/java_coding/day004# java myfor1 acbcbc
用for迴圈解決問題
//100以內偶數的和class myfor2{ public static void main(String[] args){ int sum = 0; for(int i = 1;i<101;i++){ if(i % 2 ==0){ sum +=i; } } System.out.println(sum); }}
root@debian:/home/jeff/java_coding/day004# java myfor2 2550
水仙花數問題
/*輸出所有的水仙花數,所謂水仙花數是指一個3 位元,其各個位上數字立方和等於其本身。 例如: 153 = 1*1*1 + 3*3*3 + 5*5*5*/class shuixianhua{ public static void main(String[] args){ for(int i = 100;i<1000;i++){ int bai = i / 100; int shi = (i %100) /10; int ge = i %10; if(i == bai*bai*bai+shi*shi*shi+ge*ge*ge){ System.out.println(i); } } }}
root@debian:/home/jeff/java_coding/day004# java shuixianhua 153370371407
while迴圈
格式:
①while(②){ ④ ③}
for迴圈與while可以相互轉換。
class myfor3{ public static void main(String[] args){ //100以內的和 int i = 1; int sum = 0; while(i <= 100){ if(I % 2 == 0){ System.out.println(i); sum += i; } i++; } System.out.println(sum); }}
do-while
格式:①初始化條件;②迴圈條件;③迭代條件;④迴圈體
①do{ ④ ③}while(②);
do-while與while類似,唯一的區別就是do-while至少會執行一次。
class mywhile{ public static void main(String[] args) { //do-while與while的區別 int i = 10; int j = 10; do{ System.out.println(i); i++; }while(i < 10); while(j < 10){ System.out.println(j); j++; } }}
運行會列印一個10,即i先do一次列印才會結束迴圈體。
無限迴圈:for(;;){}或者
while(true){}
說明:一般情況下,在無限迴圈內部要有程式終止的語句,使用break實現。若沒有,那就是死迴圈!
死迴圈應用
//鍵入隨意個數字,0退出,輸出正數與負數的個數import java.util.Scanner;class deadforloop{ public static void main(String[] args){ Scanner s = new Scanner(System.in); int a = 0;//記錄正數的個數 int b = 0;//記錄負數的個數 //for(;;){ while(true){ System.out.println("請輸入一個整數:"); int num = s.nextInt(); if(num > 0) a++; else if(num < 0) b++; else break; } System.out.println("正數的個數為:" + a); System.out.println("負數的個數為:" + b); } }
root@debian:/home/jeff/java_coding/day004# java deadforloop 請輸入一個整數:12請輸入一個整數:11請輸入一個整數:0正數的個數為:2負數的個數為:0
迴圈嵌套
嵌套迴圈:迴圈中還可以聲明迴圈。相當於內層迴圈的整體充當外層迴圈的迴圈體for(;;){ for(;;){ }}
while(){ for(;;){}}
迴圈之列印各種姿勢的*
class mystar{ public static void main(String[] args){ for(int i = 0;i<4;i++){//外層迴圈 for(int j = 0;j<5;j++){//內層迴圈 System.out.print("*"); } System.out.println();//每層換行 } }}
運行結果:
root@debian:/home/jeff/java_coding/day004# java mystar ********************
class mystar1{ public static void main(String[] args){ for(int i = 1;i<5;i++){//外層迴圈 for(int j = 0;j<i;j++){//內層迴圈 System.out.print("*"); } System.out.println();//每層換行 } }}
運行結果:
root@debian:/home/jeff/java_coding/day004# java mystar1 **********
class mystar2{ public static void main(String[] args){ for(int i = 4;i>0;i--){//外層迴圈 for(int j = 0;j<i;j++){//內層迴圈 System.out.print("*"); } System.out.println();//每層換行 } }}
運行結果:
root@debian:/home/jeff/java_coding/day004# java mystar2 **********
class mystar3{ public static void main(String[] args){ for(int i = 1;i<6;i++){//外層迴圈 for(int j = 0;j<i;j++){//內層迴圈 System.out.print("*"); } System.out.println();//每層換行 } for(int m = 4;m>0;m--){//外層迴圈 for(int n = 0;n<m;n++){//內層迴圈 System.out.print("*"); } System.out.println();//每層換行 } }}
運行結果:
root@debian:/home/jeff/java_coding/day004# java mystar3 *************************
class mystar4{ public static void main(String[] args){ for(int i = 1;i<6;i++){//外層迴圈 for(int j = 0;j<5-i;j++){//內層迴圈 System.out.print(" "); } for(int j = 0;j<i;j++){//內層迴圈 System.out.print("* "); } System.out.println();//每層換行 } for(int i = 4;i>0;i--){//外層迴圈 for(int j = 1;j<6-i;j++){//內層迴圈 System.out.print(" "); } for(int j = 0;j<i;j++){//內層迴圈 System.out.print("* "); } System.out.println();//每層換行 } }}
運行結果:
root@debian:/home/jeff/java_coding/day004# java mystar4 * * * * * * * * * * * * * * * * * * * * * * * * *
乘法口訣
class chengfabiao{ public static void main(String[] args){ for(int i = 1;i<10;i++){//外層迴圈 for(int j = 1;j<=i;j++){//內層迴圈 System.out.print(i+"*"+j+"="+i*j+" "); } System.out.println();//每層換行 } }}
運行結果:
root@debian:/home/jeff/java_coding/day004# java chengfabiao 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
求100000以內的質數:
/*100以內的所有質數*/class zhishu{ public static void main(String[] args){ boolean flag = false; long start = System.currentTimeMillis();//擷取系統當前的毫秒數 for(int i = 2;i <= 100000;i++){//實現100以內的自然數的遍曆 //如何判斷i是否為一個質數 for(int j = 2;j <= Math.sqrt(i);j++){ if(i % j == 0){ flag = true; break; } } if(!flag){//if(flag == false){ System.out.println(i); } flag = false; } long end = System.currentTimeMillis(); System.out.println("所花費的時間為:" + (end - start)); }}
花費時間103毫秒。
break結束當前迴圈,continue結束當次迴圈。其他語言也是這樣使用的。在break和continue語句之後不能添加其他語句,因為永遠也不可能被執行!
break與continue跳出多層的最外層:
class breakcontinue{ public static void main(String[] args) { label:for(int i = 1;i < 5;i++){ for(int j = 1;j <= 10;j++){ if(j % 4 == 0){ //break; //continue; break label; //continue label;//跳出此標籤的本次迴圈,此處時最外層的本次迴圈 } System.out.print(j); } System.out.println(); } }}
用此方法求100000以內的質數。
class zhishu1{ public static void main(String[] args){ long start = System.currentTimeMillis();//擷取系統當前的毫秒數 l:for(int i = 2;i <= 100000;i++){//實現100以內的自然數的遍曆 //如何判斷i是否為一個質數 for(int j = 2;j <= Math.sqrt(i);j++){ if(i % j == 0){ //一旦被其他數整除就跳出最外層的迴圈測試下一個資料; continue l; } } System.out.println(i); } long end = System.currentTimeMillis(); System.out.println("所花費的時間為:" + (end - start)); }}
本節代碼託管到我的github:day004。