1. 程式人生 > 其它 >第三天 迴圈結構

第三天 迴圈結構

迴圈結構

  1. while 迴圈結構

    • 最基本的迴圈結構為:
    while (布林表示式){
        //迴圈內容
    }
    
    • 只要布林表示式為true,迴圈會一直執行下去

    • 大多數迴圈必須停止下來,需要一個表達是讓迴圈停止下來結束迴圈

    • 少數部分情況下需要一直迴圈執行,比如伺服器的請求響應監聽等

    • 迴圈條件一直為true就會造成無限迴圈【死迴圈】,正常程式應避免死迴圈,會影響程式效能或造成程式卡死崩潰

    • 思考:計算1+2+3+......100=?

    package com.kuang.struct;
    
    public class WhileDemo01 {
        public static void main(String[] args) {
            //輸出1-100
            int i = 0;
            while (i<100){
                i++;
                System.out.println(i);
            }
        }
    }
    
    package com.kuang.struct;
    
    public class WhileDemon03 {
        public static void main(String[] args) {
            //計算1+2+3+...100=?
            int i = 0;
            int sum = 0;
            while (i<=100){
                sum =sum + i;
                i++;
            }
            System.out.println(sum);
        }
    }
    
  2. do ....while迴圈

    • 對於while迴圈,如不滿足條件則不進入迴圈,但有時候需要組滿足條件也要至少執行一次。

    • do....while迴圈和while迴圈相似,不同的是 do...while至少會執行一次

    do{
        //程式碼結構
    }while(布林表示式);
    
    • while和do..while的區別:
      • while先判斷後執行,do...while是先執行後判斷
      • do...while總是保證迴圈體會被至少執行一次!這是他們的主要差別
    package com.kuang.struct;
    
    public class DoWhileDemo01 {
        public static void main(String[] args) {
            int i = 0;
            int sum = 0;
            do {
                sum = sum + i;
                i++;
            }while (i<=100);
            System.out.println(sum);
        }
    }
    
    package com.kuang.struct;
    
    public class DoWhileDemo02 {
        public static void main(String[] args) {
            int a = 0;
            while (a<0){
                System.out.println(a);
                a++;
            }
            System.out.println("=========================");
             do {
                 System.out.println(a);
                 a++;
             }while (a<0);
        }
    }
    
  3. For迴圈

  • 使迴圈結構更簡單
  • 支援迭代的一種通用結構,最有效最靈活的結構
  • 次數在執行前就確定語法格式如下:
for(初始化;布林表示式;更新){
    //程式碼語句
}
  • 練習1:計算0-100之間的奇數和偶數的和
package com.kuang.struct;

public class ForDemo02 {
    public static void main(String[] args) {
        int oddSum = 0;
        int evenSum = 0;
        for (int i = 0; i < 100; i++) {
            if (i%2!=0){
                oddSum+=i;
            }else{
                evenSum+=i;
            }
        }
        System.out.println("100以內奇數何為: "+oddSum);
        System.out.println("100以內偶數何為: "+evenSum);
    }
}
  • 練習2:用while或for迴圈輸出1-1000之間能被5整除的數,並每行輸出3個
ackage com.kuang.struct;

public class ForDemo03 {
    public static void main(String[] args) {
        for (int i = 0; i <=1000; i++) {
            if (i%5==0){
                System.out.print(i+"\t");//把println  改為print
            }
            if (i%(5*3)==0){//每行3個
                System.out.println();  //換行操作
                //也可以寫為  System.out.println("\n");   換行操作
            }
        }
        //println  輸出換行
        //print    輸出不換行
    }
}
  • 練習3:列印九九乘法表
package com.kuang.struct;
/*
1X1=1
1X1=2	2X2=4
1X1=3	2X2=6	3X3=9
1X1=4	2X2=8	3X3=12	4X4=16
1X1=5	2X2=10	3X3=15	4X4=20	5X5=25
1X1=6	2X2=12	3X3=18	4X4=24	5X5=30	6X6=36
1X1=7	2X2=14	3X3=21	4X4=28	5X5=35	6X6=42	7X7=49
1X1=8	2X2=16	3X3=24	4X4=32	5X5=40	6X6=48	7X7=56	8X8=64
1X1=9	2X2=18	3X3=27	4X4=36	5X5=45	6X6=54	7X7=63	8X8=72	9X9=81
 */
public class ForDemo04 {
    public static void main(String[] args) {
        /*
        1.先列印第一列
        2.把固定的1用一個迴圈包起來  並將1替換為新的引數j
        3.去掉重複i<=j
        4.調整樣式(將println改為print
         */
        for (int j = 1; j < 10; j++) {
            for (int i = 1; i <= j; i++) {
                System.out.print(i+"X"+i+"="+(j*i)+"\t");
            }
            System.out.println();
        }
    }
}
  1. 增強for迴圈
    • 先認識下,以後陣列重點使用
    • java5引入了一種用於陣列或集合的增強型for迴圈
    • Java增強for迴圈語法格式如下:
for(宣告語句:表示式){
    //程式碼句子
}

宣告語句:宣告新的區域性變數,該變數的型別必須和陣列元素型別匹配,其作用域限定在迴圈語句塊,其值與此時陣列元素相等

表示式:表示式時要訪問的陣列名,或者返回值為陣列的方法

package com.kuang.struct;

public class ForDemo05 {
    public static void main(String[] args) {
        int[] numbers = {10,20,30,40,50};//定義一個數組
        for (int i = 0;i<5;i++){
            System.out.println(numbers[i]);
        }
        System.out.println("========================");
        //遍歷陣列元素
        for (int x:numbers){
            System.out.println(x);
        }
    }
}
  1. break continue
public class BreakDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            System.out.println(i);
            if (i==10){
                break;
            }
        }
    }
}
public class ContinueDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            if (i%10==0){
                System.out.println();
                continue;
            }
            System.out.print(i);
        }
        /*
        1.break在任何語句的主體部分,均可用break控制迴圈流程
        2.break用於強行退出迴圈,不執行迴圈中剩餘的語句(break語句在switch語句中使用)
        3.continue 語句在迴圈語句體中,用於終止某次迴圈過程,
        即跳過迴圈中尚未執行的語句,接著執行下一次是否執行迴圈的判定
         */
    }
}

goto關鍵字(瞭解即可 不需要掌握)

public class LableDemo {
    public static void main(String[] args) {
        //列印101-150之間的質數
        int count = 0;
        outer:for (int i=101;i<150;i++ ){
            for (int j = 2;j<i/2;j++){
                if (i % j ==0){
                    continue outer;
                }
            }
            System.out.print(i+" ");
        }
    }
}
public class TextDemo {
    /*
          *
         ***
        *****
       *******
      *********
     */
    public static void main(String[] args) {
        //列印三角形 5行  不知道如何執行的要善用debug
        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >= i; j--) {
                System.out.print(" ");
            }
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            for (int j = 1; j < i; j++) {
                System.out.print("*");
            }
            System.out.println("");
        }
    }
}