3 Java循環結構

配套視頻教程

本文B站配套視頻教程

幾個問題

張三oracle考試成績未達到自己的目標。為了表明自己勤奮學習的決心,他決定寫一百遍“好好學習,天天向上!”

循環結構語法

image.png

特點:先判斷,再執行

image.png

實現打印50份試卷

分析是否包含重復操作?

使用while循環的步驟

  1. 確定循環條件和循環操作
  2. 套用while語法寫出代碼
  3. 檢查循環是否能夠退出

一個練習

老師每天檢查張三的學習任務是否合格,如果不合格,則繼續進行。
老師給張三安排的每天的學習任務為:上午閱讀教材,學習理論部分,下午上機編程,掌握代碼部分。

  • 分析是否存在重復操作
  • 使用while循環實現
  1. 確定循環條件和循環操作
  2. 套用while語法寫出代碼
  3. 檢查循環是否能夠退出
image.png

提示:判斷字符串是否相等使用equals函數

 String input = "no";
        while(input.equals("no"))
        {
            System.out.println("合格了嗎?(yes/no):");
            Scanner scanner = new Scanner(System.in);
            //接收用戶輸入
            input = scanner.next();
            if(input.equals("no"))//說明不合格
            {
                System.out.println("學習學習");
            }
        }
        System.out.println("完成學習任務");

練習二

2012年培養學員10萬人,每年增長20%,請問按此增長速度,到哪一年培訓學員人數將達到100萬人?

提示:循環條件和循環操作分別是什么?
2、2013年培訓學員數量 = 100000 * (1 + 0.2 )
3、int year = 2012;
double students = 100000;
while …

public class whileDemo2 {
    public static void main(String[] args) {
//        2012年培養學員10萬人,每年增長20%,
// 請問按此增長速度,到哪一年培訓學員人數將達到100萬人?

        int year = 2012;
        double personCount = 100000;

        while(personCount <= 1000000)
        {
            //增加年數
            year++;
            //增加人數(1.2)
            personCount = personCount*1.2;
            System.out.println(year+"年"+personCount+"人");
        }

        System.out.println(year);
    }

}

程序調試

在編寫程序過程中有時也出現錯誤,但不好發現和定位錯誤,有沒有好的方法呢?

  • 通過代碼閱讀或者加輸出語句查找程序錯誤
  • 當程序結構越來越復雜時,需要專門的技術來發現和定位錯誤,就是“程序調試”


    image.png

調試例子

順序輸出1~5這5個數字

    int i = 1;
        System.out.println("程序調試演示,注意觀察i的值:");
        while(i < 5){
            System.out.println(i);
            i++;
        }
image.png

調試解決問題

調試練習

編程實現:計算100以內(包括100)的偶數之和
設置斷點并調試程序,觀察每一次循環中變量值的變化

 int i = 1;
       int total = 0;
       while(i <= 100)
       {
            if(i%2==0)//說明是偶數
            {
                total = total + i;
            }
            
            i++;
       }
        System.out.println(total);

另一個問題(do-while循環)

經過幾天的學習,老師給張三一道測試題,
讓他先上機編寫程序完成
然后老師檢查是否合格。如果不合格,則繼續編寫。……

image.png
image.png

特點:先執行,再判斷

while循環和do-while循環的區別

  • 執行次序不同
  • 初始情況不滿足循環條件時
    while循環一次都不會執行
    do-while循環不管任何情況都至少執行一次

作業

實現整數反轉 用戶輸入任意一個數字比如12345,程序輸出54321
要求用循環實現,并練習調試技巧

  Scanner scanner =  new Scanner(System.in);
        System.out.println("請輸入一個數");
        int num = scanner.nextInt();

        //12345模10能到最后一位,輸出它,再除以10,1234
        //重復上一步
        while(num>0)
        {
            //12345模10能到最后一位,輸出它,再除以10,1234
            System.out.print(num % 10);
            num = num / 10;
        }

問題回顧 輸出100次“好好學習!”

image.png

for循環的語法和執行順序

image.png

問題

循環輸入某同學高考考試的5門課成績,并計算平均分

image.png

分析
循環次數固定
使用for循環結構的步驟
1、分析循環條件和循環操作
2、套用for語法寫出代碼
3、檢查循環是否能夠退出

循環條件:循環的次數不足5,繼續循環
循環操作:錄入成績,計算成績之和

public class whileDemo2 {
    public static void main(String[] args) {

        //循環輸入某同學高考考試的5門課成績,并計算平均分
        Scanner scanner = new Scanner(System.in);
        System.out.println("輸入學生姓名");
        String name = scanner.next();

        int score = 0;
        int total = 0;
        for(int i = 1; i <= 5; i++)
        {
            System.out.println("請輸入"+i+"成績");
            score = scanner.nextInt();
            total = total + score;
        }

        System.out.println(name+"的平均成績是"+total/5);
    }

}

輸出如圖所示加法表

image.png

使用for循環:
1、循環初始化:i = 0;j = 輸入值
2、循環條件:i<=輸入值
3、循環操作:計算i+j
4、循環變量的改變:i++,j--

public class whileDemo2 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入一個值");
        int num = scanner.nextInt();//6

        int j = num;
        for(int i = 0; i <= num; i++)
        {

            System.out.println(i+"+"+j+"="+num);
            j--;
        }

    }
}

練習

求1~100之間不能被3整除的數之和

提示:
1、循環條件:i<100
2、循環操作:if (i % 3 != 0) {
sum = sum + i;
}

計算100以內的奇數之和

設置斷點調試程序,追蹤3個表達式的執行順序及循環變量的變化

回顧break語句

image.png

break:改變程序控制流

用于do-while、while、for中時,可跳出循環而執行循環后面的語句

練習

循環錄入某學生5門課的成績并計算平均分,如果某分數錄入為負,停止錄入并提示錄入錯誤

image.png

分析
循環錄入成績,判斷錄入正確性:錄入錯誤,使用break語句立刻跳出循環;否則,累加求和

public class whileDemo2 {
    public static void main(String[] args) {

        //循環輸入某同學高考考試的5門課成績,并計算平均分
        Scanner scanner = new Scanner(System.in);
        System.out.println("輸入學生姓名");
        String name = scanner.next();

        int score = 0;
        int total = 0;
        boolean error = false;//假設用戶錄入沒錯誤
        for(int i = 1; i <= 5; i++)
        {
            System.out.println("請輸入"+i+"成績");
            score = scanner.nextInt();
            if(score<0 || score>100)
            {
                error = true;//用戶錄入有誤
                break;
            }
            total = total + score;

        }

        if(error == false)
        {
            System.out.println(name+"的平均成績是"+total/5);
        }
        else
        {
            System.out.println("錄入有誤");
        }


    }
}

1~10之間的整數相加,得到累加值大于20的當前數

提示
1、使用循環進行累加,從1到10
2、判斷累加值是否大于20
3、如果大于20,則跳出循環,并打印當前值

  int total = 0;

        int i = 1;
        for(i=1; i <=10; i++)
        {
            total = total + i;
            if(total > 20)
            {
                break;
            }
           
        }
        System.out.println(i);

continue語句

continue 作用:跳過循環體中剩余的語句而執行下一次循環

循環錄入Java課的學生成績,統計分數大于等于80分的學生比例

image.png

1、通過循環,獲得分數大于等于80分的學生人數num
2、判斷:如果成績<80,不執行num++,直接進入下一次循環

  • break語句終止某個循環,程序跳轉到循環塊外的下一條語句
  • continue跳出本次循環,進入下一次循環
    public static void main(String[] args) {
//       循環錄入Java課的學生成績,
// 統計分數大于等于80分的學生比例

        //5次成績里,大于等于80分的次數


        int count = 0;
        Scanner scanner = new Scanner(System.in);

        System.out.println("請輸入班級總人數");
        int personCount = scanner.nextInt();
        for(int i = 1; i <= personCount; i++)
        {
            System.out.println("請輸入第" + i + "次成績");
            //保存本次成績
            int score = scanner.nextInt();
            //如果成績小于80的話,跳出本次循環
            //即不累加次數
            if(score < 80)
            {
                continue;
            }

            count++;//累加成績大于等于80的次數
        }

        System.out.println("80分以上學生人數為" + count);
//        double rate = (double) count/personCount;

    }
}

求1~10之間的所有偶數和

提示
1、使用循環進行累加,循環的范圍是從1至10
2 、判斷當前數是否為偶數
3 、如果為奇數跳過,執行下一個循環,如果為偶數,進行累加

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容