JAVA入门基础(五)—— for、while循环及案例


1,循环的初步了解

什么是循环:

​ 重复的执行某件事情。

在循环的时候要注意的东西:
  • 循环的开始条件
  • 循环开始后,重复执行什么
  • 循环的结束条件

2,for循环

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

在这里插入图片描述

执行流程:

​ 首先执行一次初始化语句。

​ 然后执行条件判断语句,如果为false,那么整个循环停止。

​ 如果为true,执行循环体。

​ 循环体执行完毕,执行条件控制语句。再回到条件判断处,进行判断。

案例1:
for(int i = 1 ; i <=3 ; i++){
    System.out.println("小菜同学篮球场往返跑");
}
案例2:
for(int i = 1 ; i <=3 ; i++){
    System.out.println(i);
}

第一次循环:首先执行初始化语句 int i = 1。

​ 执行 判断语句 i <= 3 。结果为true。

​ 所以,进入循环体,打印 1.

​ 执行条件控制 i ++。

-------------------现在第一次循环结束,i = 2 --------------------------------------------------

第二次循环:不会从初始化语句开始

​ 执行 i <= 3。此时2<=3。结果为true。

​ 所以,进入循环体,打印 2.

​ 执行条件控制i++。

-------------------现在第二次循环结束,i = 3 --------------------------------------------------

第三次循环:不会从初始化语句开始

​ 执行 i <= 3。此时 3<=3。结果为true。

​ 所以,进入循环体,打印3。

​ 执行条件控制i++。

-------------------现在第三次循环结束,i = 4 --------------------------------------------------

第四次循环:不会从初始化语句开始

​ 执行 i <= 3。此时 4<=3。结果为false。

​ 所以,本次循环不会执行。停止for这个整体。


问:在上面的过程中,四条语句分别执行多少次?

初始化语句:1次。

条件判断语句:4次。

循环体:3次。

条件控制语句:3次。

案例3:
//利用for循环输出1-5

//1,循环什么时候开始:  从1开始
//2,循环什么时候结束:  到5结束
//3. 循环的时候重复执行什么: 打印数字

for (int i = 1; i <= 5; i++) {
    System.out.println(i);
}
案例4:
//利用for循环打印5-1
for (int i = 5 ; i >=1 ; i--){
    System.out.println(i);
}
案例5:
//定义一个求和的变量 sum
int sum = 0;
//偷懒:次数点fori --- 快速生成for循环
for (int i = 1; i <= 5; i++) {
    sum = sum + i;//sum += i;
}
System.out.println(sum);

关于本案例的执行过程,请参见资料文件夹中的小图:循环求和.png

案例6:
public class ForDemo5 {
    public static void main(String[] args) {
        //题目:求1-100之间的偶数和

        //1.求1-100之间所有数字的和
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            //i 依次表示1~100之间的每一个数
            //System.out.println(i);
            //2.对i进行判断,如果为偶数,才累加,如果为奇数,就不累加
            if (i % 2 == 0) {
                sum = sum + i;
            }
        }
        System.out.println(sum);
    }
}
案例7:
public class ForDemo6 {
    public static void main(String[] args) {
        //求1-100之间的奇数和

        //定义了一个求和变量
        int sum = 0;

        //写一个for循环得到1-100之间的每一个数
        for (int i = 1; i <= 100; i++) {
            //i 就依次表示1~100之间的每一个数
            //对i进行判断
            if(i % 2 == 1){
                sum = sum + i;
            }
        }
        System.out.println(sum);
    }
}
案例8:
public class ForDemo7 {
    public static void main(String[] args) {
        //求1~100中,既能被3整数,又能被5整数的数字和。

        //定义一个求和变量
        int sum = 0;
        //写一个循环,得到1~100之间的每一个数
        for (int i = 1; i <= 100; i++) {
            //i依次表示1~100之间的每一个数
            //满足什么条件,才算是被3整数? % 3 == 0
            //满足什么条件,才算是被5整数? % 5 == 0
            if (i % 3 == 0 && i % 5 == 0) {
                sum = sum + i;
            }
        }
        System.out.println(sum);
    }
}

案例9:
public class ForDemo8 {
    public static void main(String[] args) {
        //在1~100中,打印个位数是7的所有数字.

        //复习:
        //获取个位: number % 10;        举例:   123 % 10
        //获取十位: number /10 % 10     举例:   123 / 10 % 10
        //获取百位: number /100 % 10
        //获取千位: number /1000 % 10
        //...

        //还要再写一个循环,1~100
        for (int i = 1; i <= 100; i++) {
            //i依次表示1~100之间的每一个数。
            //判断当前数字的个位数是否为7
            if (i % 10 == 7) {
                System.out.println(i);
            }
        }
    }
}

案例10:
//前置知识点,判断一个数是否为水仙花数
public class ForDemo9 {
    public static void main(String[] args) {
        //定义一个变量,赋值为任意一个三位数,判断这个数是否为水仙花数
        int number = 371;

        int ge = number % 10;
        int shi = number / 10 % 10;
        int bai = number / 100 % 10;

        //小括号优先于所有
        if(((ge * ge * ge) + (shi * shi * shi) + (bai * bai * bai)) == number){
            System.out.println(number + "是水仙花数");
        }else{
            System.out.println(number + "不是水仙花数");
        }
    }
}

public class ForDemo10 {
    public static void main(String[] args) {
        //打印出每一个水仙花数
        //确定范围:100 ~999
        for (int i = 100; i <= 999; i++) {
            //i依次表示这个范围中的每一个数字
            //获取这个数字的个位,十位,百位
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100 % 10;
            if(ge * ge * ge + shi * shi * shi + bai * bai * bai == i){
                System.out.println(i);
            }
        }
    }
}

案例11:统计思想
public class ForDemo11 {
    public static void main(String[] args) {
        //统计有多少个水仙花数?

        //定义一个变量,表示计数器。
        //当满足条件的时候,count++
        //表示,满足条件的数又多了一个。
        int count = 0;

        //确定范围:100 ~999
        for (int i = 100; i <= 999; i++) {
            //i依次表示这个范围中的每一个数字
            //获取这个数字的个位,十位,百位
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100 % 10;
            if(ge * ge * ge + shi * shi * shi + bai * bai * bai == i){
                //如果当前的数是水仙花数,那么计数器就要自增
                //表示水仙花数多了一个。
                count++;
            }
        }
        //当循环结束之后,就表示100~999这个范围中,所有的水仙花都已经找到了
        System.out.println(count);
    }
}

案例12:
public class ForDemo12 {
    public static void main(String[] args) {
        //统计  1 ~ 1000 之间。满足要求的数有多少个?
        //1,十位数为7
        //2,是一个偶数
        //3,能被5整除

        //技巧:
        //只要需要使用统计个数。那么一定使用计数器思想。
        int count = 0;

        //写一个循环得到这个范围中的数字
        for (int i = 1; i <= 1000; i++) {
            //i依次表示1~1000之间的每一个数
            if (i / 10 % 10 == 7 && i % 2 == 0 && i % 5 == 0) {
                //只要满足条件,那么计数器自增
                System.out.println(i);
                count++;
            }
        }
        System.out.println(count);
    }
}

3,while循环

基本格式:

​ while(条件判断语句){

​ 循环体;

​ }

完整格式:

​ 初始化语句;

​ while(条件判断语句){

​ 循环体;

​ 条件控制语句;

​ }

执行流程:

​ 首先执行初始化语句。

​ 再执行条件判断语句,如果结果为false,不进入大括号,直接停止。

​ 如果判断结果为true,才进入大括号执行循环体和条件控制语句。

​ 执行完毕之后,再次回到上面,进行判断。

核心:

​ 只有大括号中的结果为真,那么才会进入循环体。

案例:
public class WhileDemo1 {
    public static void main(String[] args) {
        //表示折叠的次数
        int count = 0;
        //定义一个变量表示珠穆朗玛峰的高度
        int height = 8844430;
        //定义一个变量表示纸张的厚度
        double paper = 0.1;

        //当纸张的厚度 < 珠穆朗玛峰的高度时,我才折叠
        //当纸张的厚度 >= 珠穆朗玛峰的高度时,我就不折叠了 --- 循环停止

        //2.只有纸张的厚度小于高度的时候,我才进入到循环体去折叠纸张。
        while(paper < height){
            //1,循环体里面做什么?折叠纸张的动作 ---> 纸张的厚度变成了原来的两倍。
            paper = paper * 2;//折叠 paper*=2;
            //每折叠一次,计数器就要自增一次。
            count++;
        }
        System.out.println(count);
    }
}

4,for循环和while的使用区别

在语法当中,for循环跟while循环几乎是没有区别的。

在语法当中,能用for的地方,一定能用while。

在语法当中,能用while的地方,一定能用for。

注意:

​ 在使用习惯上会有区别。

for:当我们能明确知道循环次数的时候。

while:当不知道循环次数,但是我们可以确定循环的停止条件。

举例:

​ 1,我想要打印 1 - 100 之间所有的偶数。

​ 用for更方便一些。因为用for循环,我们可以清晰的看出循环的开始和结束标记。

//清晰的看到循环从1开始,到100结束。
for (int i = 1; i <= 100; i++) {
    添加判断的代码...
    System.out.println(i);
}


int i = 1;
//我们发现循环开始的位置,跟循环结束的位置,没有在一行。
.....//其他的代码。。。。
while(i <= 100){
  添加判断的代码...
  System.out.println(i);
  i++;
}

2,折叠纸张,当厚度超过珠穆朗玛峰的时候就停止。

因为在做题目的时候,我也不知道到底折叠多少次,纸张的厚度才能超过珠穆朗玛峰。

所以,此时我们用while循环。

案例1:
猜数字小游戏

//有一个筛子   妹子摇了摇筛子
//重复的,循环的开始猜到底是多少?
//问:用for,还是用while更方便?
使用while更方便。
因为,我也不知道要猜多少次,才能猜中到底多少点数。
但是,如果我猜中了,那么这个游戏就停止。

案例2:

​ 登录的时候,输入用户名和密码。

​ 当用户名和密码全部输入正确时,才能认为登录成功。

​ 如果用户名和密码输入错误,那么认为登录失败。

​ 如果失败了,让用户再次重新输入,重新登录。(假设此时,没有登录次数的限制)

​ 请问,此时用for循环实现,还是用while循环实现。

​ 答案:此时肯定使用while,因为此时,我不知道用户登录第几次的时候,才能输入正确。

5,do…while循环

掌握:

​ 不管条件判断语句是真,还是假,循环体至少执行一次。

​ 在以后,几乎是不用的。最为常用的循环,就是for和while循环。

格式:

​ 初始化语句;

​ do{

​ 循环体语句;

​ 条件控制语句;

​ }while(条件判断语句);

6,无限循环

又名: 死循环。

特点: 循环一直继续,无法停下来。

for循环的死循环:
for(;;){
    System.out.println("看看我执行了吗?");
}

初始化语句是空着不写的,表示不需要初始化任何变量。

条件判断语句是空着不写的,表示这里默认为true。

条件控制语句是空着不写的,表示不需要进行任何的条件控制。

此时程序运行之后,会无限的执行循环体内容。

while循环的死循环:
while(true){
    System.out.println("看看我执行了吗?");
}

注意点:

​ while格式的死循环中,小括号里面的true必须要手动的写出来。否则会报错。

do…while的死循环:

了解一下就可以,不需要记忆。

do{
     System.out.println("看看我执行了吗?");
}while(true);

问:for循环格式的死循环、while循环格式的死循环。

在以后,通过使用谁会更方便一些。

while会更方便一些。

无限循环,我们只不知道循环的次数的。所以使用while循环会更多一些。

掌握程度:

​ 到目前为止,只要大家能把for格式的,还有while格式的无限循环能写出来就可以了。

具体无限循环的使用场景,我们到后天学习完循环控制语句之后,就能知道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

改变世界的李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值