流程控制语句之循环结构 | switch语句 | for循环 | while循环 | do...while循环 | 随机数案例

目录

switch语句

switch语句格式

执行流程

switch语句案例

需求

代码实现

运行结果

for循环

for循环结构

格式解释

执行流程

for循环案例

案例一:输出数据

需求

代码实现

案例二:求和

需求

代码实现

本题思路

案例三:偶数和

需求

代码实现

案例四:水仙花

需求

解释:什么是水仙花数

思路分析

代码实现

案例五:统计水仙花个数

需求

代码实现

本题思路

while循环

while结构

while循环执行流程

示例代码

while循环案例

需求

代码实现

do...while循环

do...while循环格式

执行流程

代码演示

三种循环的区别

for、while和do...while

for循环和while的区别

死循环的三种格式

跳转控制语句

跳转控制语句(break)

跳转控制语句(continue)

跳转控制语句(return)

注意事项

循环嵌套

循环嵌套概述

示例代码

结论

嵌套循环案例

需求

思路分析

代码实现

随机数案例

Math概述

使用步骤

创建对象

示例代码

需求

示例代码


switch语句

switch语句格式

switch (表达式) {
    case 值1:
        语句体1;
        break;
    case 值2:
        语句体2;
        break;
    ...
    default:
        语句体n+1;
        break;
}

执行流程

  • 首先计算出表达式的值;

  • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束;

  • 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

switch语句案例

  • 需求

    一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。

  • 代码实现
    public class Demo1 {
        public static void main(String[] args) {
            //键盘录入月份数据,使用变量接收
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个月份:");
            int month = sc.nextInt();
            //case穿透
            switch(month) {
                case 1:
                case 2:
                case 12:
                    System.out.println("冬季");
                    break;
                case 3:
                case 4:
                case 5:
                    System.out.println("春季");
                    break;
                case 6:
                case 7:
                case 8:
                    System.out.println("夏季");
                    break;
                case 9:
                case 10:
                case 11:
                    System.out.println("秋季");
                    break;
                default:
                    System.out.println("你输入的月份有误");
            }
        }
    }

  • 运行结果
    春:3、4、5
    夏:6、7、8
    秋:9、10、11
    冬:1、2、12

  • 注意:如果switch中得case,没有对应break的话,则会出现case穿透的现象。跟顺序无序,跟case的值有关

for循环

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形 成死循环。

for循环结构

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

格式解释

  • 初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样

  • 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去

  • 循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情

  • 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去

执行流程

①执行初始化语句
②执行条件判断语句,看其结果是true还是false
       如果是false,循环结束
       如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续

for循环案例

案例一:输出数据

  • 需求

    在控制台输出1-5和5-1的数据

  • 代码实现
            
    //原始做法
            System.out.println("HelloWorld");
            System.out.println("HelloWorld");
            System.out.println("HelloWorld");
            System.out.println("HelloWorld");
            System.out.println("HelloWorld");
            System.out.println("HelloWorld");
            System.out.println("HelloWorld");
            System.out.println("HelloWorld");
            System.out.println("HelloWorld");
    ​
            //这种做法虽然可以实现,但代码重复太高
            //所有我就用循环改进
            for(int i = 1; i<= 10; i++ ){
                System.out.println("HelloWorld");
            }
    ​
            //从0开始
            for(int j = 0; j < 10; j++){
                System.out.println("HelloWorld");
            }
    
    
    public class ForTest01 {
        public static void main(String[] args) {
            //需求:输出数据1-5
            for(int i=1; i<=5; i++) {
                System.out.println(i);
            }
            System.out.println("--------");
            //需求:输出数据5-1
            for(int i=5; i>=1; i--) {
                System.out.println(i);
            }
        }
    }

案例二:求和

  • 需求

    求1-5之间的数据和,并把求和结果在控制台输出 1+2+3+4+5

  • 代码实现
    public class ForTest02 {
        public static void main(String[] args) {
            //求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0
            int sum = 0;
            //从1开始到5结束的数据,使用循环结构完成
            for(int i=1; i<=5; i++) {
                //将反复进行的事情写入循环结构内部
                 // 此处反复进行的事情是将数据 i 加到用于保存最终求和的变量 sum 中
                sum += i;
                /*
                    sum += i;   sum = sum + i;
                     0 + 1 = 1;
                        1 + 2 = 3;
                            3 + 3 = 6;
                                6 + 4 = 10;
                                    10 + 5 = 15;
                */
            }
            //当循环执行完毕时,将最终数据打印出来
            System.out.println("1-5之间的数据和是:" + sum);
        }
    }

  • 本题思路
    • 如果遇到的需求中,带有求和二字,立即联想到求和变量

    • 求和变量的定义位置,必须在循环外部,如果在循环内部则计算出的数据将是错误的

案例三:偶数和

  • 需求

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

  • 代码实现
    public class ForTest03 {
        public static void main(String[] args) {
            //求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0
            int sum = 0;
            //对1-100的数据求和与1-5的数据求和几乎完全一样,仅仅是结束条件不同
            for(int i=1; i<=100; i++) {
                //对1-100的偶数求和,需要对求和操作添加限制条件,判断是否是偶数
                if(i%2 == 0) {
                    sum += i;
                }
            }
            //当循环执行完毕时,将最终数据打印出来
            System.out.println("1-100之间的偶数和是:" + sum);
        }
    }

案例四:水仙花

  • 需求

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

  • 解释:什么是水仙花数

    水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于本身

    例如153 3*3*3 + 5*5*5 + 1*1*1 = 153

  • 思路分析
    /*
        需求:在控制台输出所有的”水仙花数”
        
        分析:
            我们都不知道什么叫"水仙花数",你让我怎么做呢?
            
            所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
            举例:153就是一个水仙花数。
            153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
    ​
            A:三位数其实是告诉了我们范围。
            B:通过for循环我们就可以实现获取每一个三位数
              但是麻烦是如何获取这个三位数的个,十,百位上的数据
              
              我们如何获取一个数据的个,十,百呢?
                假设有个一个数据:153
                ge: 153%10 = 3
                shi:  153/10%10 = 5
                bai:153/10/10%10 = 1
                qian:x/10/10/10%10
                wan:  x/10/10/10/10%10
                ...
    ​
            C:让ge*ge*ge+shi*shi*shi+bai*bai*bai和该数据比较
              如果相同,就把该数据在控制台输出。
    */
     
  • 代码实现
    public class ForTest04 {
        public static void main(String[] args) {
             //三位数其实是告诉了我们范围。
            //输出所有的水仙花数必然要使用到循环,遍历所有的三位数,三位数从100开始,到999结束
            for(int i=100; i<1000; i++) {
                //在计算之前获取三位数中每个位上的值
                int ge = i%10;
                int shi = i/10%10;
                int bai = i/10/10%10;
                
                //判定条件是将三位数中的每个数值取出来,计算立方和后与原始数字比较是否相等
                if(i == ge*ge*ge + shi*shi*shi + bai*bai*bai) {
                    //输出满足条件的数字就是水仙花数
                    System.out.println(i);
                }
            }
        }
    }

案例五:统计水仙花个数

  • 需求

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

  • 代码实现
    public class ForTest05 {
        public static void main(String[] args) {
            //定义变量count,用于保存“水仙花数”的数量,初始值为0
            int count = 0;
            //输出所有的水仙花数必然要使用到循环,遍历所有的三位数,三位数从100开始,到999结束
            for(int i=100; i<1000; i++) {
                //在计算之前获取三位数中每个位上的值
                int ge = i%10;
                int shi = i/10%10;
                int bai = i/10/10%10;
                //在判定水仙花数的过程中,满足条件不再输出,更改为修改count的值,使count+1
                if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) {
                    count++;
                }
            }
            //打印输出最终结果
            System.out.println("水仙花共有:" + count + "个");
        }
    }

  • 本题思路
    • 如果需求带有 "统计" ,要先想到计数器变量

    • 计数器变量定义的位置,必须在循环外部

while循环

while结构

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

while循环执行流程

①执行初始化语句
②执行条件判断语句,看其结果是true还是false
     如果是false,循环结束
     如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续

示例代码

public class WhileDemo {
    public static void main(String[] args) {
        //需求:在控制台输出5次"HelloWorld"
        //for循环实现
        for(int i=1; i<=5; i++) {
            System.out.println("HelloWorld");
        }
        System.out.println("--------");
        //while循环实现
        int j = 1;
        while(j<=5) {
            System.out.println("HelloWorld");
            j++;
        }
    }
}

while循环案例

  • 需求

    世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?

  • 代码实现
    public class WhileTest {
        public static void main(String[] args) {
            //定义一个计数器,初始值为0
            int count = 0;
            
            //定义纸张厚度
            double paper = 0.1;
            
            //定义珠穆朗玛峰的高度
            int zf = 8844430;
            
            //因为要反复折叠,所以要使用循环,但是不知道折叠多少次,这种情况下更适合使用while循环
            //折叠的过程中当纸张厚度大于珠峰就停止了,因此继续执行的要求是纸张厚度小于珠峰高度
            while(paper <= zf) {
                //循环的执行过程中每次纸张折叠,纸张的厚度要加倍
                paper *= 2;
                
                //在循环中执行累加,对应折叠了多少次
                count++;
            }
            //打印计数器的值
            System.out.println("需要折叠:" + count + "次");
        }
    }

do...while循环

do...while循环格式

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

执行流程

① 执行初始化语句
② 执行循环体语句
③ 执行条件控制语句
④ 执行条件判断语句,看其结果是true还是false
    如果是false,循环结束
    如果是true,继续执行
⑤ 回到②继续

代码演示

public class DoWhileDemo {
    public static void main(String[] args) {
        //需求:在控制台输出5次"HelloWorld"
        
        //for循环实现
        for(int i=1; i<=5; i++) {
            System.out.println("HelloWorld");
        }
        System.out.println("--------");
        
        //do...while循环实现
        int j = 1;
        do {
            System.out.println("HelloWorld");
            j++;
        }while(j<=5);
    }
}

三种循环的区别

for、while和do...while

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

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

for循环和while的区别

  • 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了

  • 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用

  • for循环一般用在确定一个范围的场景, while循环一种不确定的范围的场景

死循环的三种格式

注意事项: 不玩火自粪

  1. for(;;){}

  2. while(true){}

  3. do {} while(true)

跳转控制语句

跳转控制语句(break)

结束循环

for(int x = 0; x < 10; x++){
    if(x == 3){
        break;
    }
    System.out.println(x);
}
​
//break之后这个句话是可以打印出来的
 System.out.println("over");

跳转控制语句(continue)

跳过本次循环,继续下次循环

for(int x = 0; x < 10; x++){
    if(x == 3){
        //跳出当前(本次)循环,继续下次循环
        continue;
    }
    System.out.println(x);
}
​
//break之后这个句话是可以打印出来的
 System.out.println("over");

跳转控制语句(return)

for(int x = 0; x < 10; x++){
    if(x == 3){
        //return 其实它的作用不是结束循环的,而是结束方法的。
        return;
    }
    System.out.println(x);
}
​
//return之后这个句话就不会直接输出的
 System.out.println("over");

注意事项

break和continue只能在循环中进行使用,单独使用无任何意义!!

循环嵌套

循环嵌套概述

在循环中,继续定义循环

示例代码

/*
       需求:请输出一个4行5列的星星(*)图案。
            结果:
                *****
                *****
                *****
                *****
​
            循环嵌套:就是循环语句的循环体本身是一个循环语句。
​
            通过结果我们知道这样的一个结论:
                外循环控制行数 4行
                内循环控制列数 5列
       */


public static void main(String[] args) {
    for(int x = 1; x<=4; x++){
        for(int y=1; y<=5; y++){
            System.out.print("*");
        }
        //通过输出语句来换行
        System.out.println();
    }
}

结论

外循环执行一次,内循环执行一圈

嵌套循环案例

  • 需求

    使用嵌套for循环打印九九乘法表

  • 思路分析
    1. 定义外层循环控制有多少行
       for(int i = 1 ; i <= 9 i ++)
    2. 定义内层循环控制每一行输出多少个数据
       for(int j = 1 ; j <= i ; j++)
    3. 拼接输出
       1 * 1 = 1
       1 * 2 = 2    2 * 2 = 4
    

  • 代码实现
    public class TestJJ{
        public static void main(String[] args){
            for(int i = 1 ; i <= 9;i ++){
                for(int j = 1 ; j <= i ; j++){
                    System.out.print(j + " * " + i + " = " + (i*j) +"\t");
                }
                System.out.println();
            }
        }
    }

随机数案例

Math概述

Math是一个类,也是Java提供好的API,内部提供了产生随机数的功能

API后续课程详细讲解,现在可以简单理解为Java已经写好的代码

使用步骤

创建对象

 double random = Math.random();
//返回带正号的double值,该值大于等于0.0 且 小于1.0

示例代码

   public static void main(String[] args){
​
        //获取随机数
        double random = Math.random();
        System.out.println(random);
​
        //需求:我要获取一个1-100之间的随机数,肿么办?
        for(int x=0; x<100; x++ ){
            int num = (int) (Math.random()*100) +1;
            System.out.println(num);
        }
    }
  • 需求
    程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?
        当猜错的时候根据不同情况给出相应的提示
        如果猜的数字比真实数字大,提示你猜的数据大了
        如果猜的数字比真实数字小,提示你猜的数据小了
        如果猜的数字与真实数字相等,提示恭喜你猜中了
    
  • 示例代码
        
    public static void main(String[] args){
    ​
            //产生一个被猜的随机数1-100
            int num = (int) (Math.random()*100) +1;
    ​
            //给出多次猜的机会,猜中退出
            while (true){
    ​
                //键盘录入对象
                Scanner scanner = new Scanner(System.in);
                System.out.println("请输入你要猜的数字(1-100):");
                int guessNum = scanner.nextInt();
    ​
                //把你输入的与随机产生的进行对比
                if(guessNum > num){
                    System.out.println("你猜的数据:"+guessNum+"大了");
    ​
                }else if(guessNum < num){
                    System.out.println("你猜的数据:"+guessNum+"小了");
    ​
                }else{
                    System.out.println("还是你猜中了!!!不玩了");
    ​
                    //跳出循环
                    break;
                }
            }
        }
    ​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值