首页 > 编程语言 >03 Java流程控制

03 Java流程控制

时间:2024-09-23 11:54:11浏览次数:3  
标签:case 03 Java 流程 System while 循环 println out

一、顺序结构

前面学的就是顺序结构

二、分支结构

1.if分支

  • 根据条件(真或假)来决定执行某段代码
  • if(条件){} ,()后不能跟“ ;”,否则{}中的代码将不受if的控制
  • 如果if语句的{}中只有一行代码的情况,{}可以省略不写(但是不推荐省略)

1.1  if分支的三种形式

①if(条i按表达式){

      代码

}

②if(条件表达式){

     代码1;

}else{

     代码2;

}

③if(条件表达式1){

     代码1;

}else if(条件表达式2){

     代码2;

}else if(条件表达式3){

     代码3;

}

...

else{

代码n;

}

package branch;

public class ifDemo1 {
    public static void main(String[] args) {
        //目标:掌握if分支三种形式的用法和执行流程
        //需求:测量用户体温,发现体温高于37度就报警--->只需要一个分支
        double t = 38.9;
        if(t > 37){
            System.out.println("这个人的体温异常,把他赶紧带走~~");
        }

        System.out.println("---------------------------------");

        //需求2:发红包,你的钱包余额是99元,现在要发出90元
        //如果钱够触发发红包的动作,如果钱不够,则提示:余额不足
        double money = 99;
        if(money >= 90){
            System.out.println("发红包成功了~");
        }else{
            System.out.println("余额不足~~");
        }

        System.out.println("---------------------------------");

        //需求3:某个公司有一个绩效系统,根据员工的打分输出对应的绩效级别。
        //[0,60) D , [60,80) C , [80,90) B , [90,100] A
        int score = 78;
        if(score >= 0 && score < 60){
            System.out.println("您的绩效级别是:D");
        }else if(score >= 60 && score < 80){
            System.out.println("您的绩效级别是:C");
        }else if(score >= 80 && score < 90){
            System.out.println("您的绩效级别是:B");
        }else if(score >= 90 && score <= 100){
            System.out.println("您的绩效级别是:A");
        }else{
            System.out.println("您录入的分数有误~~");
        }

        System.out.println("---------------------------------");


        
    }
}

2.switch分支

  • 是通过比较值来决定执行哪条分支

2.1 switch分支的执行流程

①先执行表达式的值,再拿着这个值去与case后的值进行匹配

②与哪个case后的值匹配为true就执行哪个case块的代码, 遇到break就跳出switch分支。

③如果全部case后的值与之匹配都是false,则执行default块的代码

2.2 switch分支的导学案例:电子备忘录

  • 周一:埋头苦干,解决bug
  • 周二:请求大牛程序员帮忙
  • 周三:今晚啤酒、龙虾、小烧烤
  • 周四:主动帮忙新来的女程序员解决bug
  • 周五:今晚吃鸡
  • 周六:与王婆介绍的小芳相亲
  • 周日:郁郁寡欢、准备上班
package branch;

public class SwithchDemo2 {
    public static void main(String[] args) {
        //目标:周一:埋头苦干,解决bug
        //周二:请求大牛程序员帮忙
        //周三:今晚啤酒、龙虾、小烧烤
        //周四:主动帮忙新来的女程序员解决bug
        //周五:今晚吃鸡
        //周六:与王婆介绍的小芳相亲
        //周日:郁郁寡欢、准备上班

        String week = "周三";
        switch (week){
            case "周一":
                System.out.println("埋头苦干,解决bug");
                break;
            case "周二":
                System.out.println("请求大牛程序员帮忙");
                break;
            case "周三":
                System.out.println("今晚啤酒、龙虾、小烧烤");
                break;
            case "周四":
                System.out.println("主动帮忙新来的女程序员解决bug");
                break;
            case "周五":
                System.out.println("今晚吃鸡");
                break;
            case "周六":
                System.out.println("与王婆介绍的小芳相亲");
                break;
            case "周日":
                System.out.println("郁郁寡欢、准备上班");
                break;
            default:
                System.out.println("您输入的星期信息肯定是不存在的~~");
        }

    }
}

2.3 if、switch的比较,以及各自适合什么业务常见?

  • if在功能上远远强大于switch
  • 当前条件是区间的时候,应该使用if分支结构
  • 当条件是与一个一个的值比较的时候,switch分支更适合;格式良好,性能较好,代码优雅。

2.4 使用switch分支的几点注意事项

  • 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持Sring、不支持double、float、long。
  • case给出的值不允许重复,且只能是字面量,不能是变量。
  • 正常使用switch的时候,不要忘记写break,否则会出现穿透现象

2.5 switch穿透线在哪些情况下可以简化代码

  • 当存在多喝case分支的代码相同时,可以把相同的代码放到一个case块中,其他的case块都通过穿透性穿透到该case块执行代码即可,这样可以简化代码

周一:埋头苦干,解决bug                                         周二:请求大牛程序员帮忙

周三:今晚啤酒、龙虾、小烧烤

周四:主动帮忙新来的女程序员解决bug                    周五:今晚吃鸡

周六:与王婆介绍的小芳相亲                                     周日:郁郁寡欢、准备上班

package branch;

public class SwitchDemo4 {
    public static void main(String[] args) {
        //目标:理解switch穿透线的作用
        String week = "周三";
        switch (week){
            case "周一":
                System.out.println("埋头苦干,解决bug");
                break;

                //周二、周三、周四有重复信息可以将它们简化;同理周六周天也行
//            case "周二":
//                System.out.println("请求大牛程序员帮忙");
//                break;
//            case "周三":
//                System.out.println("请求大牛程序员帮忙");
//                break;
//            case "周四":
//                System.out.println("请求大牛程序员帮忙");
//                break;

            case "周二":
            case "周三":
            case "周四":
                System.out.println("请求大牛程序员帮忙");
                break;
            case "周五":
                System.out.println("自己整理代码");
                break;

//            case "周六":
//                System.out.println("打游戏");
//                break;
//            case "周日":
//                System.out.println("大游戏");
//                break;
            case "周六":
            case "周日":
                System.out.println("大游戏");
                break;
            default:
                System.out.println("您输入的星期信息肯定是不存在的~~");
        }
    }
}

三、循环结构

1.for循环

格式:

for(初始化语句;循环条件;迭代语句){

循环体语句;

}

2.for循环案例

案例1:输出n个Hello World

package loop;

public class ForDemo1 {
    public static void main(String[] args) {
        //目标:掌握for循环的书写格式,并理解其执行程序
        //需求:打印多行Hello World
        //以前,会连续打印五行Hello World
        /**
            System.out.println("Hello World");
            System.out.println("Hello World");
            System.out.println("Hello World");
            System.out.println("Hello World");
            System.out.println("Hello World");
         */
        /**
            流程:
                首先会执行初始化语句:int i = 0;
                i = 0,判断循环条件 0 < 5,返回true,计算机会进入到循环中执行输出第一行Hello World,接着执行迭代语句i++
                i = 1,判断循环条件 1 < 5,返回true,计算机会进入到循环中执行输出第一行Hello World,接着执行迭代语句i++
                i = 2,判断循环条件 2 < 5,返回true,计算机会进入到循环中执行输出第一行Hello World,接着执行迭代语句i++
                i = 3,判断循环条件 3 < 5,返回true,计算机会进入到循环中执行输出第一行Hello World,接着执行迭代语句i++
                i = 4,判断循环条件 4 < 5,返回true,计算机会进入到循环中执行输出第一行Hello World,接着执行迭代语句i++
                i = 5,判断循环条件 5 < 5,返回false,循环就会立即结束
         */
        for(int i = 0; i < 5; i++) {
            //i = 0 1 2 3 4
            System.out.println("Hello World");
        }

        System.out.println("----------------------------");

        for(int i = 1;i <= 10; i +=2){
            //1 3 5 7 9
            System.out.println("Hello World2");
        }

    }
}

案例2:计算1-n的累加 和 1-100奇数的累加

package loop;

public class ForDemo2 {
    public static void main(String[] args) {
        //目标:掌握使用for循环批量生产数据
        for(int i = 1;i <= 100; i++){
            System.out.println(i);//输出1到100
        }

        System.out.println("--------------------");

        //求1到5的数据和

        //2. 定义一个变量用于求和
        int sum = 0;

        //1. 定义一个循环,先产生1-5,这五个数
        for(int i = 1; i <= 5 ; i++){
            //i = 1 2 3 4 5
            sum += i;//sum = sum + i;
        }
        System.out.println("1-5的数据和:" + sum);

        System.out.println("------------------------");

        //求1到100中奇数的和
        //2. 定义一个变量用于求和
        int sum1 = 0;

        //1. 定义一个循环产生1-100之间的奇数
        for(int i = 1; i < 100; i += 2){
            //i = 1 3 5 7 ...
            sum1 += i;
        }
        System.out.println("1-100的奇数和:" + sum1);

        System.out.println("-----------------------------");

        //在for循环中嵌入if循环去求奇数累加

        //2. 定义一个变量用于累加奇数求和
        int sum2 = 0;

        //1.定义循环产生1-100之间的每个数据
        for(int i = 1; i <= 100; i++){
            // i = 1 2 3 4 5 6 ...
            //2.使用一个if分支,判断1此时记住的数据是否是奇数,是奇数我们才累加给一个变量
            if(i % 2 == 1){
                // i = 1 3 5 7 9 ... 99
                sum2 += i;
            }
        }
        System.out.println("1-100的奇数和:" + sum2);

    }
}

3.while循环

3.1 格式

初始化语句L;

while(循环条件){

        循环体语句(被重复执行的代码);

        迭代语句;

}

3.2 while和for有什么区别?什么时候用for,什么时候用while?
  • 功能上是完全一样的。for能解决的while也能解决,反之亦然。
  • 使用规范:知道循环几次:使用for;不知道循环几次建议使用:while
package loop;

public class WhileDemo3 {
    public static void main(String[] args) {
        //目标:掌握while循环的书写格式,以及理解其执行流程。
        //需求:打印多行Hello World
        int i = 0;
        while(i < 5){
            // i = 0 1 2 3 4
            System.out.println("Hello World");
            i++;// 不写这个会出现死循环,i一直是0,就一直打印


        }
    }
}

4.while循环案例

4.1  需求1

珠穆朗玛峰高度是8848.46米=8848860毫米,假如我有一张足够大的纸,它的厚度是0.1毫米。请问:该纸张折叠多少次,可以折成珠穆朗玛峰的高度?

分析

①定义变量存储珠穆朗玛峰的高度、纸张的高度。

double peakHeight = 8848860;   //山峰高度

double paperThickness = 0.1;     //纸张高度

②使用while循环来控制纸张折叠,循环条件是(纸张厚度<山峰高度),循环每执行一次,就表示纸张折叠一次,并把纸张厚度变为原来两倍。

③循环外定义计数变量count,循环每折叠一次纸张,让count变量+1;

package loop;

public class WhileDemo4 {
    public static void main(String[] args) {
        //目标:使用while循环解决问题,并理解什么情况下使用while,for。
        // 1. 定义变量记住珠穆朗玛峰的高度和纸张的高度
        double PeakHeight = 8848860;
        double paparThickness = 0.1;

        // 3. 定义一个变量count用于记住纸张折叠了多少次
        int count = 0;
        // 2.定义while循环控制纸张开始折叠
        while (paparThickness < PeakHeight){
            //把纸张进行折叠,把纸张的厚度变成原来的两倍
            paparThickness *= 2;
            count++;
        }
        System.out.println("需要折叠多少次:" + count);
        System.out.println("最终纸张的厚度:" + paparThickness);
    }
}

5.do-while循环

5.1 结构

初始化语句;

do{

        循环体语句;

        迭代语句;

}while(循环条件);

5.2 do-while循环的特点:
  • 先执行后判断

5.3 应用场景

刷票系统:不判断你有没有票;开启后先去抢票,抢完再执行看看有没有票

5.4 三种循环的区别小结
  • for循环和while循环(先判断后执行);do...while(先执行后判断)
  • for循环和while循环的执行流程是一摸一样的,功能上无区别,for能做的while也能做,反之亦然。
  • 使用规范:如果已知循环菜熟建议使用for循环,如果不清楚要循环多少次建议使用while循环。
  • 其他区别:for循环中,控制循环的变量只在循环中使用。while循环中,控制循环的变量在循环后还可以继续使用。
package loop;

public class DoWhileDemo5 {
    public static void main(String[] args) {
        // 目标:掌握do-while循环的书写格式,执行流程,特点和应用场景。
        // 需求:打印多行Hello World
        int i = 0;
        do{
            System.out.println("Hello World");
            i++;
        }while(i < 3);

        // 特点:先执行后判断
        do{
            System.out.println("Hello World2");
        }while(false);// 先进行打印Hello World2,然后看到false停止循环

        System.out.println("--------------------");

        for (int j = 0; j < 3; j++){
            System.out.println("Hello World3");
        }
        //System.out.println(j);for循环中j变量只能在循环中用,出来就死了

        int m = 0;
        while (m < 3){
            System.out.println("Hello World4");
            m++;
        }
        System.out.println(m);//while循环外面可以用m
        //m = 0 1 2 3 ,3不成立才退出循环
    }
}

6.死循环

6.1 概念
  • 可以一直执行下去的一种循环,如果没有干预不会停下来
6.2 死循环的三种写法
  • 有需要可以用while死循环,比较经典方便
package loop;

public class EndLessLoopDemo6 {
    public static void main(String[] args) {
        //目标:掌握死循环的写法。

        //第一种写法:
        /**for (int i = 0; ; i++){// 没有循环条件就会一直循环下去;格式得再
            System.out.println("Hello World");
        }
        */
        //如果不注释掉上面的死循环,下面的命令就无法执行

        //第二种写法:(这种比较经典,以后有需要就用这种)
        /**
        while (true){
            System.out.println("Hello World2");
        }
        //true就一直执行了
        */


        //第三种写法
        /**
        do {
            System.out.println("Hello World3");
        }while(true);
        */


    }
}

7.循环嵌套

7.1概念
  • 循环中又包含循环
package loop;

public class LoopNestedDemo7 {
    public static void main(String[] args) {
        //目标:需要搞清楚循环嵌套的执行流程
        //场景:假如你有老婆,你犯错了,你老婆罚你说:3天,每天5句我爱你
        for (int i = 1; i <= 3; i++) {
            // i = 1 2 3
            /** 正常是这样写
             System.out.println("我爱你" + i);
             System.out.println("我爱你" + i);
             System.out.println("我爱你" + i);
             System.out.println("我爱你" + i);
             System.out.println("我爱你" + i);
             System.out.println("----------------------------");
             */

            //外部循环每执行一次,内部循环都要执行完一次
            for (int j = 1; j <= 5; j++) {
                System.out.println("我爱你" + i);
            }

        }
        System.out.println("-----------------------------");

        /**案例:打印三行四列的星星
         ****
         ****
         ****
         */
        for(int i = 1; i <= 3; i++){//i是行,j是列
            // i = 1 2 3
            //定义一个循环控制每行打印多少列星星
            for (int j = 1; j <= 4; j++){
                System.out.print("*");//去掉println中的ln就不会自动换行,不让就是一列竖着的星星

            }
            System.out.println();//换行
        }

    }

四、跳转关键字:break、continue

1. 概念

  • break:跳出并结束当前所在循环的执行。
  • continue:用于跳出当前循环的当次执行,直接进入循环的下一次进行

2. 注意事项

  • break:只能用于结束所在循环,或者结束所在switch分支的执行
  • continue:只能在循环中进行使用
package loop;

public class BreakAndContinueDemo8 {
    public static void main(String[] args) {
        //目标:掌握break和continue的作用
        //1.break:跳出并结束当前所在循环的执行
        //场景:假如你又有老婆,你犯错了,你老婆罚你说:5句我爱你
        //说到第三句的时候心软了,让你别再说了
        for (int i = 1; i <= 5; i++){
            System.out.println("我爱你:" + i);
            if(i == 3){
                //说明已经说完了三句,心软了
                break;//跳出并结束当前所在循环的执行
            }
        }

        System.out.println("--------------------------");

        //2. continue:跳出当前循环的当次执行,直接进入循环的下一次执行
        //场景:假如你有啊咯破,你犯错了,你老婆罚你洗碗5天
        //第三天的时候你表现很好,第三天不用洗碗,第四天还要继续
        for (int i = 1; i <= 5; i++){
            if(i == 3){
                //已经到了第三天,第三天不用洗了
                continue;
            }
            System.out.println("洗碗:" +i);
        }

        /**
        if(3 < 9){
            //braek; 会报错,因为break不能直接放在if里面,break只能出现在循环内或switch分支中
            //上面的例子中也有if中有break,但它其实是在for循环里

            //continue;会报错,因为continue只能出现在循环中
            System.out.println("Hello World");
        }
         */
    }
}

五、案例技术:随机数Random类

1.作用

  • 生产随机数

2.得到0-9的随机数的实现步骤

  • 导包:告诉程序去JDK的哪个包中找Random
  • 写一行代码拿到随机数对象
  • 调用随机数的功能获取0-9之间的随机数

3.注意

  • nextInt(n) 功能只能生成:0 至 n-1之间的随机数,不包含n

4.Random生成指定区间随机数

  • 例如:要生成 1 - 10 之间的随机数,程序怎么实现?

技巧:加减法

package random;

import java.util.Random;

public class RandomDemo1 {
    public static void main(String[] args) {
        //目标:掌握使用Random生成随机数的步骤

        // 1.导包。不需要做什么,直接往下2

        // 2.创建一个Random对象,用于生产随机数
        Random r = new Random();
        // 3.调用Random提供的功能:nextInt得到随机数。
        for (int i = 1; i <= 20; i++) {     //ctrl + alt + t 可选择循环类型,要选中需要放在循环的语句
            int data = r.nextInt(10);//bound不是自己打的,会自动跳出来。
            //数字10顾前不顾后,就是 0 - 9
            System.out.println(data);
        }


        System.out.println("--------------------");

        for (int i = 1; i <= 20; i++) {
            // 生成:1-10之间的随机数
            // 1-10 => -3 => (0 - 9) + 1
            int data2 = r.nextInt(10) + 1;
            System.out.println(data2);
        }


        System.out.println("------------------------");

        for (int i = 1; i <= 20; i++) {
            // 生成:3-17之间的随机数
            // 3-17 => -1 => (0 - 14) + 3
            int data3 = r.nextInt(15) + 3;
            System.out.println(data3);
        }

        System.out.println("------------------");
        int data4 = r.nextInt(10,30);//选择带有origin的可以指定区间
        //不包含bound的数据,但是包含origin的。所以这里是10-29的区间
        System.out.println(data4);
    }
}

5. 猜数字游戏

  • 需求:随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏
package random;

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

public class RandomTestDemo2 {
    public static void main(String[] args) {
        // 1.随机产生一个1-100之间的数据,做为中奖号码
        Random r = new Random();
        int luckNumber = r.nextInt(100) + 1;

        // 2.定义一个死循环,让用户不断的猜测数据
        Scanner sc = new Scanner(System.in);//用扫描器接收用户猜测的数据
        while (true){
            //提示用户猜测
            System.out.println("请您输入您猜测的数据:");
            int guessNumber = sc.nextInt();

            // 3.判断用户猜测的数字与幸运号码的大小情况
            if(guessNumber > luckNumber){
                System.out.println("您猜测的数字过大~~");
            }else if(guessNumber < luckNumber){
                System.out.println("您猜测的数字过小~~");
            }else {
                System.out.println("您猜中了,可以买单了~~");
                break;//结束死循环
            }
        }
    }
}

标签:case,03,Java,流程,System,while,循环,println,out
From: https://blog.csdn.net/m0_62458285/article/details/142374733

相关文章