Java流程控制3:选择结构

选择结构(重点)

if选择结构

if单选择结构


我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程中用if语句来表示。

语法
if(布尔表达式){
    //如果布尔表达式为ture将执行的语句
}
//如果不为ture则跳过该语句执行之后的语句

如果不为ture则跳过该语句执行之后的语句

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rq8w6qBg-1632646779041)(D:\JAVA学习图片\Java流程控制\011.png)]

例子与解析
public class amy02 {
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入内容");
        String s=scanner.nextLine();
        //equals:判断字符串是否相等
        /*如果语句System.out.println("请输入内容");
        中的字符串与Hellow相等那么输出s否则输出END
         */
        if (s.equals("Hellow")){
            System.out.println(s);
        }
        System.out.println("END");
        scanner.close();
    }
}

if双选择结构

引入

现在有个需求,公司要收购一个软件,成功了,给人支付100W,失败了,则自己找人开发一个类似的软件。

这样的需求用if单选择结构是搞不定的,我们需要有两个判断,需要一个双选择结构,所以就有了if-else结构

语法
if(布尔表达式){
    //如果布尔表达式的值为true
}else{
    //如果布尔表达式的值为false
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Z5Uja64-1632646779043)(D:\JAVA学习图片\Java流程控制\012.png)]

考试分数大于60就是及格,小于60分就是不及格

public class amy03 {public static void main(String[] args){
    //**考试分数大于60就是及格,小于60分就是不及格**
    Scanner scanner=new Scanner(System.in);
    System.out.println("请输入你的成绩");
    scanner.nextInt();
    double score=scanner.nextInt();
    if (score>60){
        System.out.println("及格");
    }else{
        System.out.println("不及格");
    }
    scanner.close();
 }
}

if多选择结构

引入

由上述我们发现刚才的代码不符合实际情况,真实的情况还可能存在ABCD,存在区间多级判断,比如90-100就是A,80-90就是B…等等,在生活中我们很多时候的选择也不仅仅只有两个,所以我们需要一个多选择结构来处理这类问题!

语法:
if(布尔表达式1){
    //如果布尔表达式1的值为true执行此代码
}else if(布尔表达式2){
    //如果布尔表达式2的值为true执行此代码
}else if(布尔表达式3){
    //如果布尔表达式3的值为true执行此代码
}else{
    //如果以上布尔表达式都不为true执行此代码
}

重点在else if

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2yU1Z04z-1632646779044)(D:\JAVA学习图片\Java流程控制\013.png)]

对考试分数大于60就是及格,小于60分就是不及格进行引入中的优化

import java.util.Scanner;
public class amy03 {
    public static void main(String[] args) {
        //**考试分数大于60就是及格,小于60分就是不及格**
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的成绩");
      int score = scanner.nextInt();
        if (score == 100) {
            System.out.println("恭喜你你是满分:");
            //注意不等式的表达用与运算符。
        } else if (score < 100 && score >= 90) {
            System.out.println("A级");
        } else if (score < 90 && score >= 80) {
            System.out.println("B级");
        } else if (score < 80 && score >= 70) {
            System.out.println("C级");
        }else if (score < 70 && score >= 60) {
            System.out.println("D级");
        }else if (score < 60 && score >= 0){
            System.out.println("成绩不及格");
        }else {
            System.out.println("成绩不合法请重新输入");
        }
          scanner.close();
    }
}

注意点
  • 注意连接不等式的是与运算符
  • if语句中至多有一个else语句。且else语句出现在所以else if语句之后
  • if语句中可以有若干个else if语句。它们必须在else 语句之前。
  • 一旦其中一个else if语句检测为true。其他的else if以及else语句都得跳过执行。

嵌套的if结构

使用嵌套的if…else语句是合法的。也就是说你可以在另一个if或者else if中使用if或else if语句你可以像if语句那样嵌套else if…else。

语法:
if(布尔表达式 1){
    如果布尔表达式1的值为true执行的代码
    if(布尔表达式 2){
        如果布尔表达式2的值为true执行的代码
    }
}
用于实现二分法

switch多选择结构

  • 多选择结构还有一个实现方式就是switch case语句

  • switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支

语法

switch(expression){
    case value:
        //语句
        break;//可选
    case value:
        //语句
        break;//可选
    //你可以有任意数量的case语句
    default://可选
        //语句
}
注意事项

switch语句中的变量类型可以是

  • byteshortint或者char
  • 从JavaSE7开始switch支持字符串string类型了
  • 同时case标签必须为字符串常量或字面量
  • case穿透现象:没有break时case在匹配成功后还会向下执行
public class amy04 {    public static void main(String[] args) {       char grade='C';       switch (grade){           //case穿透没有break时匹配成功后还会向下执行  //switch 匹配一个具体的值           case 'A':               System.out.println("优秀");               break;//可选           case 'B':                System.out.println("良好");                break;           case 'C':                System.out.println("及格");                break;           case 'D':               System.out.println("再接再厉");               break;           case 'E':               System.out.println("挂科");               break;           default:               System.out.println("未知等级");       } }}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UHuHSnWo-1632646779046)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20210908100915191.png)]

穿透现象

若将break去掉后并把定义的grade改为B

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hUPQdL9Q-1632646779047)(D:\JAVA学习图片\Java流程控制\015.png)]

支持字符串类型的switch

从JavaSE7开始switch支持字符串string类型了


import java.util.Scanner;public class amy04 {    public static void main(String[] args) {     String name="鲁邦";     switch (name){         case"鲁邦":             System.out.println("Amy");             break;         case "蓓蕾卡":             System.out.println("wife");             break;         default:             System.out.println("YYDS");     }    }}

由运算符相关知识知道

字符的本质还是数字

原理

:反编译

​ Java…class(字节码文件)人是看不懂的…反编译为Java程序或其他(idea)即可

如何查看反编译

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6F9PDVSg-1632646779049)(D:\JAVA学习图片\Java流程控制\016.png)]

点击之后找到编译器输出路径


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C4uXjVGM-1632646779049)(D:\JAVA学习图片\Java流程控制\017.png)]

CV该路径去资源管理器中搜索

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uAEQv1p2-1632646779050)(D:\JAVA学习图片\Java流程控制\018.png)]

点击production

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBL1zmHH-1632646779051)(D:\JAVA学习图片\Java流程控制\019.png)]

随便打开一个发现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AQGXQ1JC-1632646779051)(D:\JAVA学习图片\Java流程控制\020.png)]

发现全是乱码

复制该文件(我是将base中的amy 复制到company中)

到其他文件夹中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jfOvDsd0-1632646779052)(D:\JAVA学习图片\Java流程控制\021.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t1BZo2Vb-1632646779053)(D:\JAVA学习图片\Java流程控制\022.png)]

发现会报错


但是还有骚操作

右键点击该文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2KDlry45-1632646779053)(D:\JAVA学习图片\Java流程控制\023.png)]

然后选择用idea打开即可


进行反编译

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zaGC3wWv-1632646779054)(D:\JAVA学习图片\Java流程控制\024.png)]

发现switch name变成了has code

最后还是找的是字符串

可以理解为

每个对象都有一个has code每个中文对应一个has code值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值