顺序与分支结构(JAVA笔记第九期)

p.s.这是萌新自己自学总结的笔记,如果想学习得更透彻的话还是请去看大佬的讲解

顺序结构

顺序结构是JAVA中最简单且是基本的结构。除非特别说明,否则就按照顺序一步一步的执行
顺序结构是任何一种算法都离不开的一种基本算法结构。
在这里插入图片描述

分支结构

if语句

格式一(单条件判断)

if(关系表达式){
语句体; 
}

具体如下

if(a > 2){
System.out.println("你过关!")}

执行流程

  1. 首先计算关系表达式的值
  2. 如果值为true就执行语句体
  3. 如果值为false就不执行语句体
  4. 继续执行后面语句体

流程图如下在这里插入图片描述

格式二(双条件判断)

if(关系表达式){
语句体1}
else{
语句体2}

执行流程

  1. 首先计算关系表达式的值
  2. 如果值为true就执行语句体1
  3. 如果值为false就执行语句体2
  4. 继续执行后面语句体

流程图如下
在这里插入图片描述

举例题

import java.util.Scanner;

public class s {
    public static void main(String[] args) {
        //需求:键盘录入女婿酒量,如果大于2斤,老丈人给出回应,反之不回应
        //if(关系表达式){
        // 语句体;
        //}

//键盘录入女婿的酒量
            Scanner scanner = new Scanner(System.in);
        System.out.println("提问:女婿酒量多少");
        //然后接收酒量数据
        int wine = scanner.nextInt();
//对酒量进行判断
        if (wine > 2){
            System.out.println("你过关!!");
        }
         else {
            System.out.println("菜就多练");
        }

        scanner.close();
    }
}

扩展: int a = 10其实是两种语句。一是定义a的类型,二是给a赋值
判断要用”==“,“=”是赋值的意思

格式三(多条件判断)

if(关系表达式1){
语句体1}else if(关系表达式2) {
  语句体2;
}
else{
语句体 n+1}

执行流程

  1. 首先计算关系表达式1的值
  2. 如果值为true就执行语句体1;如果为false就计算关系表达式2的值
  3. 如果值为true就执行语句体;2如果为false就计算关系表达式2的值
  4. 如果·········
  5. 如果值全为false,就执行语句体n+ 1
  6. 继续执行后面语句体

流程图如下
在这里插入图片描述
举例题

import java.util.Scanner;

public class s {
    public static void main(String[] args) {
        //1000的东西,输入会员级别,123级分别打987折,
        // 非会员不打折,最后输出应付钱数
        double money = 1000;
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入会员等级(0~3)");
        int level = scanner.nextInt();
        if (level >= 0 && level <= 3) {
            if (level == 1) {
                money = money * 0.9;
                System.out.println("你要付的钱为" + money);
            } else if (level == 2) {
                money = money * 0.8;
                System.out.println("你要付的钱为" + money);
            } else if (level == 3) {
                money = money * 0.7;
                System.out.println("你要付的钱为" + money);
            } else {
                System.out.println("你要付的钱为" + money);
            }

        } else {
            System.out.println("看清问题谢谢");
        }
        scanner.close();
    }
}

switch语句

格式

switch (表达式){
            case1;
                语句体1;
            break;
            
            case2;
                语句体2;
            break;
            
            default :
                语句体 n+1;
                break;
        }

执行流程

  1. 首先计算表达式的值。
  2. 依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束
  3. 如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后结束整个switch语句
    在这里插入图片描述

流程图如下
在这里插入图片描述
举例题

import java.util.Scanner;
//输入日期获得学习计划
public class s {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("提问:今天周几?");
        int day = scanner.nextInt();
        switch (day){
            case 1:
                System.out.println("学语文!");
                break;
            case 2:#
                System.out.println("学数学!");
                break;
            case 3:
                System.out.println("学英语!");
                break;
            case 4:
                System.out.println("学生物!");
                break;
            case 5:
                System.out.println("学物理!");
                break;
            case 6:
                System.out.println("学化学!");
                break;
            case 7:
                System.out.println("学JAVA!");
                break;
            default:
                System.out.println("请输入正确日期");
                break;
        }
        scanner.close();
    }
}

补充

  1. defalut的位置可以写在任意位置,只不过习惯将其写在最下方
    defalut可省略,语法上没问题但最好不要省略
  2. case穿透
    switch语句中不能省略break,否则上面的例题当你随便键入一个数字后就会输出
3
学英语!
学生物!
学物理!
学化学!
学JAVA!
请输入正确日期

这就叫case穿透

发生case穿透的原因:就是语句体中没有写break导致的

执行流程
首先还是会拿着小括号表达式的值跟下面每一个case进行匹配
如果匹配上了就会执行对应的语句体,如果此时发现了break,那么结束整个switch语句
如果没有发现break,那么程序会执行下一个case的语句体(即case穿透),一直遇到break或大括号为止
使用场景
如果多个case的语句体重复了,那么我们考虑用case穿透去简化代码

  1. case语句简化
    case还有另外一种写法(不能出现两种不同写法的case)
switch (day){
            case 1:
                System.out.println("学语文!");
                break;
            case 2:#
                System.out.println("学数学!");
                break;
            case 3:
                System.out.println("学英语!");
                break;
            case 4:
                System.out.println("学生物!");
                break;
            case 5:
                System.out.println("学物理!");
                break;
            case 6:
                System.out.println("学化学!");
                break;
            case 7:
                System.out.println("学JAVA!");
                break;
            default:
                System.out.println("请输入正确日期");
                break;
            }

利用case的另外一种写法可以将上述switch语句简化为

switch (day){
            case 1 ->{
                System.out.println("学语文!");}
            case 2 ->{
                System.out.println("学数学!");}
            case 3 -> {
                System.out.println("学英语!");}
            case 4 -> {
                System.out.println("学生物!");}
            case 5 -> {
                System.out.println("学物理!");}
            case 6 -> {
                System.out.println("学化学!");}
            case 7 -> {
                System.out.println("学JAVA!");}
            default ->{
                System.out.println("请输入正确日期");}
            }

二如果语句块只有一行代码,那么case的大括号也可以省略,即

        switch (day){
            case 1 ->System.out.println("学语文!");
            case 2 ->System.out.println("学数学!");
            case 3 ->System.out.println("学英语!");
            case 4 ->System.out.println("学生物!");
            case 5 ->System.out.println("学物理!");
            case 6 ->System.out.println("学化学!");
            case 7 ->System.out.println("学JAVA!");
            default ->System.out.println("请输入正确日期");
        }
  1. switch和if第三种格式各自的使用场景
    if的第三种格式一般用于对范围的判断
    switch则用于把有限给数据一一列举出来,让我们任选其一的场景

case穿透适用情景 (当语句体重复了的时候)

import java.util.Scanner;

public class s {
    public static void main(String[] args) {
        //输入日期,并得知是工作日还是休息日
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入一个整数表示星期几");
        int day = scanner.nextInt();
        switch (day){
            case 1:
                System.out.println("工作日");
            break;
            case 2:
                System.out.println("工作日");
                break;
            case 3:
                System.out.println("工作日");
                break;
            case 4:
                System.out.println("工作日");
                break;
            case 5:
                System.out.println("工作日");
                break;
            case 6:
                System.out.println("休息日");
                break;
            case 7:
                System.out.println("休息日");
                break;
            default:
                System.out.println("请看清题目");
                break;
        }
    }
}

使用case穿透便可简化代码

import java.util.Scanner;

public class s {
    public static void main(String[] args) {
        //输入日期,并得知是工作日还是休息日
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入一个整数表示星期几");
        int day = scanner.nextInt();
        switch (day){
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("工作日");
                break;
            case 6:
            case 7:
                System.out.println("休息日");
                break;
            default:
                System.out.println("请看清题目");
                break;
        }
    }
}

还可以合并case以及利用case的另一种写法以及一行代码省略大括号来简化

import java.util.Scanner;

public class s {
    public static void main(String[] args) {
        //输入日期,并得知是工作日还是休息日
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入一个整数表示星期几");
        int day = scanner.nextInt();
        switch (day){
            case 1,2,3,4,5 -> System.out.println("工作日");
            case 6,7       -> System.out.println("休息日");
            default        -> System.out.println("请看清题目");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值