JavaSE基础之循环语句(i++与++i区别,continue和break关键字)

目录

一、for循环结构

格式:

格式说明:

范例:

执行流程:

案例练习

Tips:(选学)——关于自增运算符和自减运算符

案例2(求和思想)

案例3(求偶数和)

案例4(水仙花数)

案例5(统计思想)

案例六(回文数)

案例7(逢七过)

二、while循环

格式:

范例:

执行流程:

案例练习

案例1(求奇数和)

案例2(珠穆朗玛峰)

三、do-while循环

格式:

范例:

执行流程:

四、三种循环的区别

三种循环语句的区别:

for和while的区别:

死循环格式:

五、continue和break

六、综合案例(小瓦特存钱)


一、for循环结构

格式:

9847a095f95440b2aa5307b65f49799a.jpeg


格式说明:

  1. 初始化语句:可以是一条或者多条语句,这些语句用来完成初始化操作

  2. 条件判断语句:这里使用一个结果值为boolean类型的表达式,这个表达式能决定是否执行循环体语句

  3. 循环体语句:这里可以是任意语句,这些语句可能被多次执行

  4. 条件控制语句:这里通常是使用一条语句来改变变量的值,从而达到控制循环是否继续向下执行的效果


范例:

140cf5619eb24d849c15d73c58f6768a.jpeg


执行流程:

4ab273c2875a4864b120531e394210dc.jpeg

代码范例:(输出五行HelloWorld)

public class ForDemo{
    public static void main(String[] args){
        for(int i=1;i<=5;i+=1){
            System.out.println("HelloWorld");
        }
    }
}

案例练习

案例1(输出数据)

需求:在控制台输出1-5的数据

分析:

①反复进行输出的动作,使用循环结构

②从1开始到5结束,设置初始化从1开始

③从1开始到5结束,设置判断条件为没有到5的时候继续执行,执行到超过5程序结束

④从1到5,每次增加1,设置条件控制每次+1

⑤将反复进行的事情写入循环结构内部,打印对应数据

代码讲解:

/*
在控制台输出1-5的数据
 */
public class ForTest01 {
    public static void main(String[] args) {
        //不用循环的解法
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
        System.out.println(4);
        System.out.println(5);
        //那如果输出1-100呢?
        for(int i=0;i<5;i+=1){
            System.out.println(i+1);
        }
        System.out.println("----------------");
        //为了便于理解for循环再给出例子
        for(int i=1;i<=5;i+=2){
            System.out.println(i);
        }
        System.out.println("----------------");

        //自增运算发:++
        //跟在变量后面表示变量+1
        for (int i = 1; i <=5 ; i++) {
            System.out.println("i");
        }
        System.out.println("-----------------");
        //从5-1怎么办呢
        for (int i = 5; i >=1 ; i-=1) {
            System.out.println(i);
        }
        System.out.println("-----------------");
        //自减运算符:--
        //和自家运算符同理,跟在数据后表示变量-1
        for (int i = 5; i >=1 ; i--) {
            System.out.println(i);
        }
        System.out.println("-----------------");
    }
}

在代码过程中,我还提出了自增运算符:++和自减运算符:--,并且演示了如何获取数据5-1


Tips:(选学)——关于自增运算符和自减运算符

Java语言的底层说C++实现

所以追溯到C++底层函数的应用:

// 前缀形式:

  int& int::operator++() //这里返回的是一个引用形式,就是说函数返回值也可以作为一个左值使用

        {//函数本身无参,意味着是在自身空间内增加1的

    *this += 1; // 增加

    return *this; // 取回值

  }

       //后缀形式:

  const int int::operator++(int) //函数返回值是一个非左值型的,与前缀形式的差别所在。

   {//函数带参,说明有另外的空间开辟

     int oldValue = *this; // 取回值

    ++(*this); // 增加

    return oldValue; // 返回被取回的值

  }

简单来说:

i++ 与 ++i 的主要区别有两个:

  1、 i++ 返回原来的值,++i 返回加1后的值。

  2、 i++ 不能作为左值被赋值,而++i 可以。

例如:        ++i=1;//正确

                   i++=1;//错误

如果单独使用的时候++i和i++没有差距;从复杂度的角度讲++i更好;


案例2(求和思想)

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

代码示例:

/*
在控制台输出1-5的数据的和
 */
public class ForTest02 {
    public static void main(String[] args) {
        //for循环实现
        int sum = 0;
        for (int i = 1; i <= 5; i++) {
            sum += i;
            /*
                第一次求和 sum=sum+i=0+1=1
                第一次求和 sum=sum+i=1+2=3
                第一次求和 sum=sum+i=3+3=6
                第一次求和 sum=sum+i=6+4=10
                第一次求和 sum=sum+i=10+5=15
             */
        }
        //输出结果
        System.out.println("1-5的求和结果是" + sum);
    }
}

案例3(求偶数和)

需求:求1-100之间的偶数和,并把求和结果在控制台输出

分析:

①对1-100的数据求和与1-5的数据求和几乎完全一样,仅仅是结束条件不同

②对1-100的偶数求和,需要对求和操作添加限制条件

③限制条件是偶数才参与运算,因此条件应该是判断是否是偶数

④当循环执行完毕时,将最终数据打印出来

代码示例:

/*
求1-100之间的偶数和
 */
public class ForTest03 {
    public static void main(String[] args) {
        //for循环实现
        int sum=0;
        for (int i = 1; i <=100 ; i++) {
            if(i%2==0){
                sum+=i;
            }
        }
        System.out.println("1-100之间的偶数和是:"+sum);
    }
}

案例4(水仙花数)

需求:在控制台输出所有的“水仙花数”

看到这个需求,我们首先要解决的问题就是,什么样的数据是“水仙花数”?它满足如下两个条件:①水仙花数是一个三位数

        比如:111 222 333 370 371 520 999

②水仙花数的个位、十位、百位的数字立方和等于原数

        例如:123        1^3+2^3+3^3=1+8+27=36≠123        所以123不是水仙花数

                   371        3^3+7^3+1^3=27+343+1=371=371        所以371是水仙花数

知道了什么是水仙花数后,分析下实现步骤:

①获取三位数,通过循环实现

②获取每一个三位数的个位,十位,百位(前面的博客讲过)

③判断该三位数是否是水仙花数

④输出水仙花数知道了实现步骤

代码示例:

/*
在控制台输出所有的水仙花数
 */
public class ForTest04 {
    public static void main(String[] args) {
        //for循环实现
        System.out.println("水仙花数:");
        for(int i=100;i<=1000;i++){
            //获取个十百位
            int geWei=i%10;
            int shiWei=i/10%10;
            int baiWei=i/100%10;
            //判断是不是水仙花数
            if(geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei==i){
                System.out.println(i);
            }
        }
    }
}

案例5(统计思想)

需求:统计“水仙花数”一共有多少个,并在控制台输出个数

不做分析,自己实现

示例代码:

/*
在控制台输出水仙花数的个数
 */
public class ForTest05 {
    public static void main(String[] args) {
        //for循环实现
        //定义一个计数器
        int count=0;
        for(int i=100;i<=1000;i++){
            //获取个十百位
            int geWei=i%10;
            int shiWei=i/10%10;
            int baiWei=i/100%10;
            //判断是不是水仙花数
            if(geWei*geWei*geWei+shiWei*shiWei*shiWei+baiWei*baiWei*baiWei==i){
                count++;
            }
        }
        System.out.println("一共有 "+count+" 个水仙花数");
    }
}

一个重要思想就是,定义统计变量count;


案例六(回文数)

需求:输出所有五位数的回文数

看到这个需求,我们首先要解决的问题就是,什么样的数据是“回文数”?

一个数,无论是从左往右读,还是从右往左读,读起来都相同的数,叫做“回文数”

举例:10101,12321:是回文数

           12345:不是回文数

规律:个位=万位

           十位=千位

            与百位无关

了解了回文数相关的基础知识后,分析下实现步骤:

①获取五位数,通过循环实现

②获取每一个五位数的个位,十位,千位,万位

③判断该五位数是否是回文数

④输出回文数

示例代码:

/*
输出所有五位数回文数
 */
public class ForTest06 {
    public static void main(String[] args) {
        //for循环实现
        for (int i = 10000; i <=99999 ; i++) {
            //获取万位千位十位个位
            int w=i/10000%10;
            int k=i/1000%10;
            int s=i/10%10;
            int g=i%10;
            //判断五位数是不是回文数
            if((w==g)&&(k==s)){
                System.out.println(i);
            }
        }
        //练习:统计五位数回文数的个数,并在控制台输出
    }
}

练习一下;


案例7(逢七过)

需求:朋友聚会的时候可能会玩一个游戏:逢七过

规则是:从任意一个数字开始报数,当你要报的数字包含7或者是7的倍数时都要说:过

为了帮助大家更好的玩这个游戏,这里我们直接在控制台打印出1-100之间的满足逢七必过规则的数据。

这样,大家将来在玩游戏的时候,就知道哪些数据要说:过

分析:

①数据的范围1-100之间,用循环很容易实现

②要满足的条件是:数字包含7(个位是7,或者十位是7),或者是7的倍数

实现步骤:

①获取1-100之间的数据,通过循环实现

②判断数字包含7或者是7的倍数判断数据:要么个位是7,要么十位是7,要么能够被7整除

③在控制台输出满足条件的数据

示例代码:

/*
逢七过
 */
public class ForTest07 {
    public static void main(String[] args) {
        //for循环实现
        for (int i = 1; i <= 100; i++) {
            //判断数字包含7或者是7的倍数判断数据:要么个位是7,要么十位是7,要么能够被7整除
            if ((i % 10 == 7) || (i / 10 % 10 == 7) || (i % 7 == 0)) {
                System.out.println(i);
            }
        }
    }
}

二、while循环

格式:

ab5977644dc94553bc209c794b30861d.jpeg


范例:

84b6c4c5f60545438dbae1bd697cb413.jpeg


执行流程:

7a0fc7d42fd04fc394a3b1add7e23a2c.jpeg


案例练习

案例1(求奇数和)

需求:求1-100之间的奇数和,并把求和结果在控制台输出

分析:

①对1-100的奇数求和,和前面讲解的偶数求和几乎是完全一样,仅仅是判断条件不同

②判断条件是奇数才参与运算,因此条件应该是判断是否是奇数

③当循环执行完毕时,将最终数据打印出来

示例代码:

/*
求1-100的奇数和
 */
public class WhileTest01 {
    public static void main(String[] args) {
        //while循环实现
        int sum = 0, i = 1;
        while (i <= 100) {
            if (i % 2 != 0) {
                sum += i;
            }
            i++;
        }
    }
}

优化代码:

/*
求1-100的奇数和
 */
public class WhileTest01 {
    public static void main(String[] args) {
        //while循环实现
        int sum = 0, i = 1;
        while (i <= 100) {
            sum += i;
            i += 2;
        }
    }
}

案例2(珠穆朗玛峰)

需求:世界最高峰珠穆朗玛峰(8848.86m),我现在有一张足够大的纸张,厚度为:0.001m。请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?

分析:

①因为要反复折叠,所以要使用循环,该选for循环还是while循环呢?

小技巧:循环次数明确,使用for循环;循环次数不明确,使用while循环

这里不知道折叠多少次,这种情况下更适合使用while循环

②纸张每折叠一次,厚度加倍,因此要先定义纸张厚度,在循环中使厚度加倍

③什么时候就停止折叠了呢?直到纸张的厚度大于等于珠峰的高度,反言之,就要折叠

④要求的是统计折叠次数,所以会用到统计思想

实现步骤:

①定义统计变量,初始化值为0

②定义纸张厚度变量和珠峰高度变量

③用while循环实现反复折叠,判断条件是纸张厚度小于珠峰高度

④循环体中要做两件事情:一是纸张厚度加倍,二是统计变量+1

⑤当循环结束,输出统计变量的值

示例代码:

/*
世界最高峰珠穆朗玛峰(8848.86m),我现在有一张足够大的纸张,厚度为:0.001m。请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
 */
public class WhileTest01 {
    public static void main(String[] args) {
        //while循环实现
        int count = 0;//代表折叠次数
        double i = 0.001;
        while (true) {
            if (i < 8848.86) {
                i *= 2;
                count++;
            } else {
                break;
            }
        }
        System.out.println("需要折叠 " + count + " 次");
    }
}

三、do-while循环

格式:

196fefc920ae43efabf1ac36a599c5f0.jpeg


范例:

f154183df23b4e0a9d144346b6765550.jpeg


执行流程:

1dedea83d09a49f9b3ee2e4d7c74ff02.jpeg


四、三种循环的区别

三种循环语句的区别:

for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)

do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)


for和while的区别:

条件控制语句所控制的自增变量,在for循环结束后,就不可以继续使用

条件控制语句所控制的自增变量,在while循环结束后,还可以继续使用


死循环格式:

for(;;){}

while(true) {}

do{}while(true);

由于循环语句的区别,只是大家需要理解的知识点,故这里不需要练习;


五、continue和break

为了讲解跳转控制语句,这里我给出几个场景看一看:

场景一:周一到周五上班,周六日不上班

ad79c4d77e144715a016e2ebb377a79d.jpeg

场景二:成人后一直工作到60岁,60岁之后就可以退休养老了

52568189477a48789cce519bc0ffe167.jpeg 刚才的场景中,重点介绍了两个跳转关键字:

        1、continue用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行

        2、break用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环

了解了这两个跳转关键字之后,下面到IDEA中去体验一下:

class ControlDemo {
    public static void main(String[] args) {
        //循环可以起名
        a:for (int i = 0; i <5; i++) {
            if(i%2==0){
//                continue;
                // break;
                //break后跟循环名就是结束那个循环
                break  a;
                
            }
        }
    }
}

六、综合案例(小瓦特存钱)

需求:小瓦特的妈妈每天给他2.5元钱,他都会存起来,但是,每当这一天是存钱的第5天或者5的倍数的话,他都会花去6元钱,请问,经过多少天,小瓦特才可以存到100元钱。

示例代码:

/*
需求:小瓦特的妈妈每天给他2.5元钱
他都会存起来,但是,每当这一天是存钱的第5天或者5的倍数的话
他都会花去6元钱,请问,经过多少天,小瓦特才可以存到100元钱。
 */
class ControlTest {
    public static void main(String[] args) {
//小瓦特的妈妈每天给他2.5元钱
        double dayMoney = 2.5;
        //他都会存起来,设计求和,定义求和变量,初始值为0
        double sumMoney = 0;
        //存到100元
        double result = 100;
        //定义一个统计变量为天数,初始为1
        int dayCount = 1;

        //因为不知道多少天结束,所以采用死循环实现,存到100元时,通过break跳出循环代表结束
        while (true) {
            //存钱
            sumMoney += dayMoney;
            //存到100元退出循环
            if (sumMoney >= result) {
                break;
            }
            //存钱这天是第5天或者5的倍数,花去6元
            if (dayCount % 5 == 0) {
                sumMoney -= 6;
                System.out.println("第 " + dayCount + " 天花了6元");
            }
            dayCount++;
        }
        System.out.println("小瓦特一共花了 " + dayCount + " 天存到了100元");
    }
}

动手练习一下吧!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

瓦特的代码小屋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值