Java开发从入门到精通(三):Java的基础语法知识进阶:分支语句、循环语句、随机数

(一)Java的流程控制

程序中最经典的三种执行顺序
在这里插入图片描述

1.1 分支语句

1.1.1 IF分支语句

  • 根据条件(真或假)来决定是否执行某段代码。
  • IF分支语句有三种表达方式

在这里插入图片描述

1.1.1.1 第一种IF语句

执行流程:

  • ① 首先判断条件表达式的结果,如果**为true执行语句体,为 false 就不执行语句体**

注意事项:

  • if 语句中,如果大括号控制的只有一行代码,则大括号可以省略不写

在这里插入图片描述

public class IfDemo {
    public static void main(String[] args) {
        // 目标:需要同学们掌握1f分支三种形式的用法和执行流程
        // 需求:测量用户体温,发现体温高于37度就报警。
        double t = 36.9;
        if (t > 37) {
            System.out.println("这个人的温度异常,把他赶紧带走~~");
        }
    }
}
1.1.1.2 第二种IF-ELSE语句

执行流程:

  • ① 首先判断条件表达式的结果,如果为true执行语句体1,为 false 就执行语句体2

在这里插入图片描述

public class IfDemo {
    public static void main(String[] args) {
        // 需求2:发红包,你的钱包余额是99元,现在要发出90元
        // 如果钱够触发发红包的动作,如果钱不够,则提示:余额不足。
        double money = 19;
        if (money >= 90) {
            System.out.println("发红包成功了~");
        } else {
            System.out.println("余额不足~~");
        }
    }
}
1.1.1.3 第三种IF-ELSE IF-ELSE语句

执行流程:

  • ① 先判断条件1的值,如果为true则执行语句体1,分支结束;如果为false则判断条件2的值
  • ②如果值为true就执行语句体2,分支结束;如果为false则判断条件3的值
  • ③…
  • ④如果没有任何条件为true,就执行else分支的语句体n+1。

在这里插入图片描述

public class IfDemo {
    public static void main(String[] args) {
        //需求3:某个公司有一个绩效系统,根据员工的打分输出对应的绩效级别。[0,60)D [60,80)C[80,90)B[90,100]A
        double KPI=800;
        if (KPI >= 90 && KPI <= 100){
            System.out.println("绩效为A");
        } else if (KPI >= 80 && KPI < 90) {
            System.out.println("绩效为B");
        } else if (KPI >= 60 && KPI < 80) {
            System.out.println("绩效为C");
        } else if (KPI >= 0 && KPI < 60) {
            System.out.println("绩效为D");
        } else {
            System.out.println("输入有误!");
        }
    }
}
1.1.1.4 if语句使用的几个常见问题
  • if(条件){} ,()后不能跟“;”否则{}中的代码将不受if的控制了
  • 如果if语句的0中只有一行代码的情况,(}可以省略不写(但是不推荐省略)

1.1.2 switch分支语句

  • 是通过比较值来决定执行哪条分支
1.1.2.1 switch分支的执行流程

①先执行表达式的值,再拿着这个值去与case后的值进行匹配。
②与哪个case后的值匹配为true就执行哪个case块的代码,遇到break就跳出switch分支。
③如果全部case后的值与之匹配都是false,则执行default块的代码,

在这里插入图片描述

1.1.2.2 switch分支的导学案例:电子备忘录
  • 周一:埋头苦干,解决bug
  • 周二:请求大牛程序员帮忙
  • 周三:今晚啤酒、龙虾、小烧烤
  • 周四:主动帮助新来的女程序解决bug
  • 周五:今晚吃鸡
  • 周六:与王婆介绍的小芳相亲
  • 周日:郁郁寡欢、准备上班
/**
 目标:掌握switch的写法,理解其执行流程
 */
public class SwitchDemo {
    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("您输入的星期信息肯定是不存在的~~");
        }
    }
}
1.1.2.3 if、switch的比较,以及各自适合什么业务场景?
  • if在功能上远远强大于switch。
  • 当前条件是区间的时候,应该使用if分支结构,
  • 当条件是与一个一个的值比较的时候,switch分支更合适:格式良好,性能较好,代码优雅。
1.1.2.4 使用switch分支的几点注意事项
  • 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String.1)
    不支持double、float、long。
  • case给出的值不允许重复,且只能是字面量,不能是变量。
  • 正常使用switch的时候,不要忘记写break,否则会出现穿透现象
public class SwitchDemo2 {
    public static void main(String[] args) {
        // 目标:搞清楚switch使用时的几点注意事项。
        //1、表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持string、不支持double、float、long.
        int a = 10;
        double b = 0.1;
        double b2 = 0.2;
        double c = b + b2;   //c的值看似是0.3,实际上是0.30000000000000004
        System.out.println(c);
        switch (c) {  //double 报错!
            case 0.3: //c=0.30000000000000004  不等于0.3永远执行不到这个case
                break;
        }

        //2、case给出的值不允许重复,且只能是字面量,不能是变量。
        int i = 20;
        int d = 20;
        switch (i) {
            case 20: //case给出的值不允许重复 报错!
                break;
            case 20:
                break;
            case d: //case给出的值只能是字面量,不能是变量  报错!
                break;
        }
        //正常使用switch的时候,不要忘记写break,否则会出现穿透现象。
        String week ="周一";
        switch(week) {
            case "周一":
                System.out.println("埋头苦干,解决bug");
                //break;  不写break 就继续执行下一个case 会出现穿透现象
            case "周二":
                System.out.println("请求大牛程序员帮忙");
                break;

            default:
                System.out.println("您输入的星期信息肯定是不存在的~~");
        }
    }
}
0.30000000000000004
埋头苦干,解决bug
请求大牛程序员帮忙

1.1.2.5 switch穿透性在些情况下可以简化代码
  • 当存在多个case分支的代码相同时,可以把相同的代码放到一个case块中,其他的case块都通过穿透性穿透到该case块执行代码即可,这样可以简化代码。
public class SwitchDemo3 {
    public static void main(String[] args) {
/*
    - 周一:埋头苦干,解决bug
    - 周二:请求大牛程序员帮忙
    - 周三:今晚啤酒、龙虾、小烧烤
    - 周四:主动帮助新来的女程序解决bug
    - 周五:今晚吃鸡
    - 周六:与王婆介绍的小芳相亲
    - 周日:郁郁寡欢、准备上班
*/
        String week ="周二";
        switch(week) {
            case "周一":
                System.out.println("埋头苦干,解决bug");
                break;
            case "周二":
            case "周三":
            case "周四":
                System.out.println("请求大牛程序员帮忙"); //周二,三,四的代码都是请求大牛程序员帮忙,可以利用穿透性简化代码
                break;
            case "周五":
                System.out.println("今晚吃鸡");
                break;
            case "周六":
            case "周日":
                System.out.println("与王婆介绍的小芳相亲");
                break;
            default:
                System.out.println("您输入的星期信息肯定是不存在的~~");
        }
    }
}

1.2 循环语句

1.2.1 FOR循环

  • 控制一段代码反复执行很多次

for循环格式:
在这里插入图片描述
在这里插入图片描述

for 循环案例详细流程说明:

在这里插入图片描述

for 循环代码详细流程演示:

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

for循环在开发中的常见应用场景

  • 减少代码的重复编写、灵活的控制程序的执行
public class ForDemo2 {
    public static void main(String[] args) {
        // 目标:掌握使用for循环批量产生数据
        // 1、定义一个循环批量产生1-100这几个数
        for (int i = 0; i < 100; i++) {
            System.out.println(i);
        }

        // 2、定义一个变量用于求和
        int sum = 0;
        for (int i = 0; i <= 100; i++) {  // 定义一个循环,先产生1-100,这100个数
            //i = 0 1 2 3 4 5
            sum = sum + i; //sum += i;
        }
        System.out.println("1-100数据的和:" + sum);
        
		//3、定义一个变量用于求奇数和
        int sum1 =0;
        for (int i = 0; i <= 100; i+=2) {  // 定义一个循环,先产生1-100中所有的奇数
            sum1 += i;
        }
        System.out.println("1-100数据的奇数和:" + sum1);
        
		//4、定义一个变量用于求奇数和
        int sum2 =0;
        for (int i = 0; i <= 100; i++) {
            if (i % 2 == 1){
                sum2 += i;
            }
        }
        System.out.println("1-100数据的奇数和:" + sum2);
		
		//5、定义一个变量用于求偶数和
        int sum3 =0;
        for (int i = 0; i <= 100; i++) {
            if (i % 2 == 0){
                sum3 += i;
            }
        }
        System.out.println("1-100数据的偶数和:" + sum3);
    }
}

1.2.2 while循环

  • 控制一段代码反复执行很多次

while循环格式:
在这里插入图片描述
在这里插入图片描述

while 循环案例详细流程说明:
在这里插入图片描述

while 循环代码详细流程演示:

public class WhileDemo {
    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++;
        }
    }
}

while和for有什么区别?什么时候用for,什么时候用while?:

  • 功能上是完全一样的,for能解决的while也能解决,反之亦然。
  • 使用规范:知道循环几次:使用for 不知道循环几次建议:使用while

1.2.3 使用while循环还是for循环案例

在这里插入图片描述
在这里插入图片描述

1.2.3.1 使用while循环(推荐)
public class WhileTest {
    public static void main(String[] args) {
        // 目标:使用while循环解决问题,并理解什么情况下使用while,for。
        //1、定义变量记住珠穆朗玛峰的高度和纸张的高度。
        double peakHeight=8848860;
        double paperThickness =0.1;
        
        // 3、定义一个变量count用于记住纸张折叠了多少次
        int count =0;
        
        //2、定义while循环控制纸张开始折叠
        while(paperThickness < peakHeight) {
            // 把纸张进行折叠,把纸张的厚度变成原来的2倍
            paperThickness = paperThickness * 2;
            count++;
        }
        System.out.println("需要折叠多少次:"+ count);
        System.out.println("最终纸张的度是:"+ paperThickness);
    }
}
需要折叠多少次:27
最终纸张的度是:1.34217728E7
1.2.3.2 使用for循环
public class WhileTest {
    public static void main(String[] args) {
        // 目标:使用while循环解决问题,并理解什么情况下使用while,for。
        //1、定义变量记住珠穆朗玛峰的高度和纸张的高度。
        double peakHeight=8848860;
        double paperThickness =0.1;
        
        // 3、定义一个变量count用于记住纸张折叠了多少次
        int count =0;
        
        //2、定义while循环控制纸张开始折叠
        for(;paperThickness < peakHeight;count++) {
            // 把纸张进行折叠,把纸张的厚度变成原来的2倍
            paperThickness = paperThickness * 2;    
        }
        System.out.println("需要折叠多少次:"+ count);
        System.out.println("最终纸张的度是:"+ paperThickness);
    }
}
需要折叠多少次:27
最终纸张的度是:1.34217728E7

在这里插入图片描述

1.2.4 do-while循环

  • 控制一段代码反复执行很多次

do-while循环格式:先执行后判断
在这里插入图片描述

在这里插入图片描述

public class DoWhileDemo {
    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);


    }
}

1.2.5 三种循环区别

  • for循环 和 while循环(先判断后执行),do…while(先执行后判断)
  • for循环 和 while循环的执行流程是一模一样的,功能上无区别,for能做的while也能做,反之亦然
  • 使用规范:如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环
  • 其他区别:for循环中,控制循环的变量只在循环中使用。while循环中,控制循环的变量在循环后还可以继续使用
public class DoWhileDemo {
    public static void main(String[] args) {
        for(int j=0;j<3;j++) {
            System.out.println("Hello World3");
        }
        // System.out.println(j);
        for(int j=0;j<3;j++){
            System.out.println("Hello World3");
        }
        
        int m=0;
        while(m < 3) {
            System.out.println("Hello World4");
            m++;
        }
            System.out.println(m); // 3
    }
}

1.2.5 死循环

  • 可以一直执行下去的一种循环,如果没有干预不会停下来
1.2.5.1 for死循环
public class EndLessLoopDemo {
    public static void main(String[] args) {
        // 目标:掌握死循环的写法。
        for (;;){
            System.out.println("Hello World1");
        }
    }
}
1.2.5.2 while死循环 (经典写法推荐)
public class EndLessLoopDemo {
    public static void main(String[] args) {
        // 目标:掌握死循环的写法。
        while (true){
            System.out.println("Hello World2");
        }
    }
}
1.2.5.3 do-while死循环
public class EndLessLoopDemo {
    public static void main(String[] args) {
        // 目标:掌握死循环的写法。
        do {
            System.out.println("Hello World3");
        } while(true);
    }
}

1.2.6 循环嵌套

  • 外部循环每循环一次,内部循环会全部执行完一轮
public class LoopNestedDemo7 {
    public static void main(String[] args) {
        // 目标:搞清楚循环嵌套的执行流程。
        // 场景:假如你有老婆,你犯错了,你老婆罚你说:3天,每天5句我爱你。
        for(int i=1; i<= 3; i++) {
            //i=1 2 3
            for (int j = 1; j <= 5; j++) {
                System.out.println("我爱你:" + i);
            }
            System.out.println("--------------");
        }
        /**
         ****
         ****
         ****
         */
        for(int i=1; i<= 3; i++){
            //i=1 2 3
            // 定义一个循环控制每行打印多少列星星
            for(int j=1;j<= 4;j++){
                System.out.print("*");// 不换行
            }
            System.out.println();//换行
        }

    }
}

1.2.7 break和continue

终止循环:

  • break:跳出并结束当前所在循环的执行
  • continue:用于跳出当前循环的当次执行,直接进入循环的下一次执行
    在这里插入图片描述
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;//跳出并结束当前所在循环的执行。
            }
        }

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

1.3 案例演示

1.3.1 Random随机数

  • 作用:生成随机数
    在这里插入图片描述
import java.util.Random;

public class RandomDemo {
    public static void main(String[] args) {
        Random r = new Random();
        int number = r.nextInt(10);
        System.out.println("随机生成了:"+number);
    }
}

注意:

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

1.3.2 Random生成指定区间随机数

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

  • 技巧:减加法

package com.qianxin.loop;

import java.util.Random;

public class RandomDemo {
    public static void main(String[] args) {
        Random r = new Random();
        int number = r.nextInt(10);
        System.out.println("随机生成了:" + number);

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

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

1.3.2.1 猜数字游戏
import java.util.Random;
import java.util.Scanner;

public class RandomTest {
    public static void main(String[] args) {
        Random r = new Random();
        int number = r.nextInt(100) + 1;

        Scanner sc = new Scanner(System.in);
        while(true){

            System.out.println("请猜一下我写的数是多少:");
            int num = sc.nextInt();
            if (num > number){
                System.out.println("猜的有点大了!");
            } else if (num < number) {
                System.out.println("猜的有点小了");
            }else {
                System.out.println("猜对了");
                break;
            }
        }
    }
}
  • 31
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HACKNOE

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

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

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

打赏作者

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

抵扣说明:

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

余额充值