# 一、循环语句结构

# 1.1 while 循环语句

# 1.1.1 while 循环语句的格式

格式:

初始化语句;
	while(条件判断语句){
		循环体语句;
条件控制语句;
}

执行流程:

  1. 执行初始化语句,该语句只会执行一次
  2. 执行条件判断语句,例如 i <= 5,看其返回结果是 true 还是 false 如果为 false,则结束循环如果为 true ,   则继续循环
  3. 执行条件控制语句,改变控制循环的变量,例如 i++;
  4. 随后回到步骤 2 再次执行条件判断语句,以此类推

# 1.1.2 案例代码

案例一: 使用 while 循环,打印 10 次 HelloWorld

package _01while循环;
/*
在工作中尽量的去减少冗余代码,因为可以提高我们的工作效率。

需求:在控制台输出3次的,"您好,传智教育"

解决方案: 使用循环语句去实现。

循环语句的作用: 重复去做一件事情。(循环语句可以反复执行某一段代码)

while循环的格式:

    变量定义语句;

    while(循环条件判断语句){
        符合上述循环条件重复执行的代码;
        循环条件的控制语句;
    }

 */
public class Demo1 {

    public static void main(String[] args) {
        //1. 先定义一个变量记录循环的次数
        int i = 0;
        while(i<3){ //循环的条件  0 1 2
            //每次执行完毕循环体都会回到循环的条件判断一次是否要继续循环
            System.out.println("您好,传智教育");
            i++; //循环条件控制语句,每循环一次i都递增1.
        }
    }
}

案例 2:使用 while 循环求 1-100 之间的和,并输出结果

package _01while循环;
/*
需求:使用while循环求1-100之间的和,并输出结果

1+2+3+4...+100

思路分析:
   1.定义一个变量控制循环的次数,由于本次需要是1~100,所以该变量的值我从1开始。 int  i = 1;
   2. 循环条件  i<=100  1~100
   3. 定义一个变量保存每次累加循环的i的值
 */
public class Demo2 {

    public static void main(String[] args) {
        // 1.定义一个变量控制循环的次数,由于本次需要是1~100,所以该变量的值我从1开始。 int  i = 1;
        int i = 1;
        // 2. 循环条件  i<=100  1~100
        int sum=0;
        while(i<=100){ //{}表示的一个作用范围
            //3. 定义一个变量保存每次累加循环的i的值
            sum=sum+i;
            i++;
        }

        //作用域: 一个变量的作用域在当前定义变量所属的{}里面
        System.out.println("总和:"+sum);
    }
}

案例 3:一张纸的厚度是 0.0001 米,珠穆朗玛峰的高度是 8848 米,在理论情况下,
一张纸折叠多少次能超过珠穆朗玛峰的高度?

package _01while循环;
/*
需求:一张纸的厚度是0.0001米,珠穆朗玛峰的高度是8848米,在理论情况下,
          一张纸折叠多少次能超过珠穆朗玛峰的高度?

 */

public class Demo3 {

    public static void main(String[] args) {
        //1. 定义变量保存纸张的厚度
        double paper = 0.0001;
        //2. 定义一个变量保存珠穆朗玛峰的高度
        int shan = 8848;
        //3. 编写循环的条件,纸张的厚度如果还小于珠穆朗玛峰的高度都需要继续循环对折
        //4. 定义一个变量保存每次对折次数
        int count = 0;
        while(paper<=8848){
            //纸张的厚度等于原本的厚度*2
            paper=paper*2;
            //每对折一次,次数的+1
            count++;

        }
        System.out.println("对折的次数:"+count);

    }
}

# 1.2 for 循环语句

# 1.2.1 循环语句的作用

循环语句可以反复执行某一段代码

# 1.2.2 for 循环的格式

for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}

执行流程:

  1. 执行初始化语句,该语句只会执行一次
  2. 执行条件判断语句,例如 i <= 5,看其返回结果是 true 还是 false,如果为 false,则结束循环, 如果为 true ,   则执行循环体语句
  3. 执行条件控制语句,改变控制循环的变量,例如 i++;
  4. 随后回到步骤 2 再次执行条件判断语句,以此类推

# 1.2.3 for 循环示例

案例 1:

package _02for循环语句;
/*
for循环的语句作用:重复执行一段代码;

for循环语句的格式:
    for(变量的定义语句;循环条件判断语句;循环条件控制语句){
        循环体内容;(需要循环的语句)
    }

for循环的执行流程:


需求: 输出10次,奥利给!
 */
public class Demo1 {

    public static void main(String[] args) {
          //1(声明变量|定义变量)   2(循环条件判断)   4(循环条件控制语句)
        for (int i = 0       ; i < 3   ;       i++) {
            //3(循环体内容)
            System.out.println(i+"奥利给...."); //1 2  3
        }
    }
}

案例二: 使用 for 循环输出 1-5, 输出 5-1

package _02for循环语句;

/*
 System.out.println("呵呵"); 自带换行功能
 System.out.print("哈哈"); 不带换行功能
-------------------------------------------

需求:使用for循环输出1-5, 输出5-1


 */
public class Demo2 {

    public static void main(String[] args) {
        //输出1~5
        for (int i = 1; i <=5 ; i++) {
            System.out.print(i+",");
        }
        System.out.println(); //换行,什么内容都不输出,仅仅为了换行

        //输出5~1       1>0    ,,,,0
        for (int i = 5; i >0 ; i--) {
            System.out.print(i+","); //5,4,3,2,1,
        }
    }
}

案例二: 求 1-5 之间的数据和,并把求和结果在控制台输出

package _02for循环语句;

/*
需求: 求1-5之间的数据和,并把求和结果在控制台输出

 */
public class Demo3 {

    public static void main(String[] args) {
        //1. 变量用于保存每次累加的总和
        int sum =0;
        //2由于需要计算1~5的总和,所以变量从1开始,到5结束。
        for (int i = 1; i <=5; i++) {
            //3. 每次循环的i都累加到sum变量中。
            sum=sum+i;
        }
        System.out.println("总和:"+sum);
    }
}

案例三: 写一个程序判断并输出 0~10 之间的每个整数是奇数还是偶数

package _02for循环语句;
/*
需求:写一个程序判断并输出0~10之间的每个整数是奇数还是偶数

奇数:数字%2!=0  比如:1%2=0..1

偶数: 数字%2=0   比如:4/2=2..余数0

 */
public class Demo4 {

    public static void main(String[] args) {
        //1. 编写一个循环是从0~10
        for (int i = 0; i <=10 ; i++) {
            if(i%2==0){//偶数,能够被2整除
                System.out.println(i+"是偶数");
            }else{
                System.out.println(i+"是奇数");
            }
        }
    }
}

# 1.3 do-while 循环语句(了解)

# 1.3.1 格式

初始化语句;

do {

    循环体语句;

    条件控制语句;

} while(条件判断语句);

执行流程:

  1. 执行初始化语句,该语句只会执行一次
  2. 执行循环体语句
  3. 执行条件控制语句,改变控制循环的变量,例如 i++;
  4. 执行条件判断语句,例如 i <= 5,看其返回结果是 true 还是 false 如果为 false,则结束循环

如果为 true ,   则回到步骤 2 再次执行循环体语句,以此类推

# 1.3.2 案例

案例 1:使用 do..while 循环输出 1-10 的数字

package _03dowhile循环语句;

/*
do-while格式:

        定义变量;
        do{
            循环体语句;
        }while(循环条件语句);

需求:输出1~10的数字。

特殊之处: 先执行,后判断的,不管条件是否成立最起码会执行一次。
 */

public class Demo1 {

    public static void main(String[] args) {
        int i=100;
        do{
            System.out.print(i+",");
            //循环的控制语句
            i++;
        }while(i<=10);



    }
}

# 1.4 三种循环的对比

  • for 循环与 while 循环都是先执行判断语句,后执行循环体语句, do-while 循环语句是先执行循环体,在判断。
  • for 循环初始化的变量只能在循环体内部使用,while 循环的变量是定义再循环的外部的,所以循环结束之后还可以继续使用
  • 明确具体的循环次数一般我们使用 for 循环,不明确循环次数我们使用 while 循环,do-while 循环很少使用。

# 1.5   死循环

for 循环的死循环格式:

for(;;){
      System.out.println("死循环")  ;
}

while 循环的死循环:

while(true){
      System.out.println("死循环")  ;
}

# 二、Debug 调试

# 2.1 debug 的作用

debug 的作用就是让程序停留在指定的位置,然后我们可以观察程序运行过程中数据的变化,从而判断出我们程 序的问题。基础班很少机会使用到 debug 断点调试

# 2.2 debug 的步骤

  1. 如何加断点?选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可

1645278689061.png

  1. 如何运行加了断点的程序?在代码区域右键 Debug 执行

1645278745138.png
3. 看哪里?看 Debugger 窗口
1645278792905.png
看 console 窗口
1645278811536.png
4. 点哪里
点 Step Into (F7)这个箭头,也可以直接按 F7,执行下一步
1645278857033.png
点 Stop 结束
1645278896837.png

  1. 如何删除断点

删除单个断点:       选择要删除的断点,单击鼠标左键即可
1645279036560.png
删除多个断点: 如果是多个断点,可以每一个再点击一次。也可以一次性全部删除
1645279084372.png

# 三、跳转控制语句

# 3.1 break 与 continue 关键字的作用

  • continue 作用:跳过本次循环继续下一次
  • break 作用:
    • 在 switch 语句中的作用就是结束 switch 语句
    • 用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环

# 3.2 break 与 continue 示例代码

public class Demo9 {

    public static void main(String[] args) {
        //需求:打印1 2 4 5 7 8 10, 跳过3,6,9
        for (int i = 1; i <10 ; i++) {
            if(i%3==0){
                continue;
            }
            System.out.println(i);
        }

        //使用循环打印1~10,遇到3马上结束,结果打印1,2
        for (int i = 1; i <10 ; i++) {
            if(i==3){
                break;
            }
            System.out.println(i);
        }
    }
}

# 四、循环嵌套

# 4.1 什么是循环嵌套

循环语句中包含循环语句称为循环嵌套,     一个循环的循环体语句,是另外的一个循环

for (;;) {
for (;;) {
循环体语句;
}
}

# 4.2 示例代码

//需求:每天有24小时,每个小时有60分钟,打印从0时0分到23时59分
public class Test {
    public static void main(String[] args) {
        for (int i = 0; i <24 ; i++) {
            for (int j = 0; j < 60; j++) {
                System.out.println(i+"小时,"+j+"分");
            }
        }
    }
}

# 五、Random 随机数

# 5.1 什么是随机数

可以生成一个随机的数字

# 5.2 生成随机数的固定步骤

1).导包:导包的动作必须出现在类定义的上

import java.util.Random;

2).创建对象:这里的写法是固定的,只有 r 可以变化

Random r= new Random();

3).获取随机数:得到随机数

int num = rdm.nextInt(10);//生成:0-9的随机数
int num = rdm.nextInt(10) + 1;//生成1-10的随机数

# 5.3 随机数示例

import java.util.Random;

/**
 * 需求:生成一个1-100之间的随机数
 */
public class Test01 {

    public static void main(String[] args) {
        Random r = new Random();
        int  result = r.nextInt(100)+ 1;
        System.out.println("随机数:"+result);
    }
}

# 5.4 小结

  • 生成随机数的步骤
    • Random 变量名 = new Random();
    • int 变量名 = r.nextInt(随机数值的范围);

# 六、综合案例

# 6.1 统计一周内考勤情况

package _09综合案例;

import java.util.Scanner;

/*
需求:公司每周都要对出勤情况进行统计

具体如下:
1.定义一个变量统计上班的次数
2.使用for循环1-7的数字
3.在for循环中使用Scanner获取1或者0
   1表示有上班,0表示休假或旷工
4.使用if语句判断输入的是1还是0
5.如果输入的是1则把统计变量++
6.最终打印一周出勤了几天
  结果: 本周共出勤xx天!

 */
public class Case1 {

    public static void main(String[] args) {
//        1.定义一个变量统计上班的次数
        int count=0;
//        2.使用for循环1-7的数字
        Scanner sc = new Scanner(System.in);
        for (int i = 1; i <=7 ; i++) { //1~7
            if(i<7) {
                System.out.println("请输入你周" + i + "是否上班:");
            }else {
                System.out.println("请输入你周日是否上班:");
            }
            //        3.在for循环中使用Scanner获取1或者0
            int num = sc.nextInt();
            //        4.使用if语句判断输入的是1还是0
            if(num==1){
                //上班
                //        5.如果输入的是1则把统计变量++
                count++;
            }
        }

//        6.最终打印一周出勤了几天
        System.out.println("本周你上班的天数:"+count+"天");
    }
}

# 6.2 猜数字小游戏

package _09综合案例;

import java.util.Random;
import java.util.Scanner;

/*
需求:
程序自动生成一个1-10之间的数字,使用程序实现猜出这个数字是多少?
 根据不同情况给出相应的提示,能够猜三次
    如果猜的数字比真实数字大,提示你猜的数据大了
    如果猜的数字比真实数字小,提示你猜的数据小了
    如果猜的数字与真实数字相等,提示恭喜你猜中了

 */
public class Case2 {

    public static void main(String[] args) {
        //1. 随机产生一个数字
        Random r = new Random();
        int num = r.nextInt(10)+1;


        Scanner sc = new Scanner(System.in);
        //3. 对比你猜的数字与随机数
        for (int i = 0; i <3 ; i++) {

            //2. 提示用户录入你猜得数字
            System.out.println("请输入你本次要猜的数字:");
            int guessNum = sc.nextInt();//用户猜的数字
            if(guessNum>num){
                System.out.println("猜大了,请重新猜");
            }else if(guessNum<num){
                System.out.println("猜小了,请重新猜");
            }else{
                System.out.println("恭喜您,猜对了");
                //猜对需要结束整个循环
                break;
            }
        }


    }
}

# 6.3 随机打印成语

package _09综合案例;

import java.util.Random;

/*
    随机产生1~7的一个数字,输出每个数字对应的成语.

    如下:

         1:一帆风顺

         2:二话不说

         3:三心二意

         4:四面楚歌

         5:五湖四海

         6:六亲不认

         7:七上八下
 */
public class Case3 {

    public static void main(String[] args) {
        //1.产生一个随机数
        Random r = new Random();
        int num = r.nextInt(7)+1; //随机数范围就是1~7

        //2.判断随机数等于哪个数字
        switch (num){
            case 1:
                System.out.println("一帆风顺");
                break;
            case 2:
                System.out.println("二话不说");
                break;
            case 3:
                System.out.println("三心二意");
                break;
            case 4:
                System.out.println("四面楚歌");
                break;
            case 5:
                System.out.println("五湖四海");
                break;
            case 6:
                System.out.println("六亲不认");
                break;
            case 7:
                System.out.println("七上八下");
                break;

        }
    }
}