9-分支选择

if判断
在Java程序中,如果要根据条件来决定是否执行某一段代码,就需要if语句
if(条件){//语句块1
    //条件满足执行此语句块1
}else{//语句块2
    //条件不满足时执行 else 下的语句块2
    //else 不是必须的
    //当不存在 else ,如果条件不满足,将会跳过语句块1
}

注意:不建议省略 {}
串联if-else
        int n = 100;
        if (n >= 60) {//条件1
            System.out.println("及格了");
        } else if (n >= 90) {//条件2
            System.out.println("优秀");
        } else {//条件1和2都不满足
            System.out.println("挂科了");
        }
//当条件有多个时可以将if else 串联使用      

注意:串联使用多个 if 时,要特别注意判断顺序,还要特别注意边界条件(> 和 >= 效果是不同的)
浮点数在计算机中常常无法精确表示,计算可能出现误差,因此,判断浮点数相等用==判断不靠谱
        double x = 1 - 9.0 / 10;
        if (Math.abs(x - 0.1) < 0.00001) {//浮点数判断
            System.out.println("x is 0.1");
        } else {
            System.out.println("x is NOT 0.1");
        }

判断引用类型
在Java中,判断值类型的变量是否相等,可以使用==运算符。但是,判断引用类型的变量是否相等,== 表示是否指向同一个对象。
        String s1 = "hello";
        String s2 = "HELLO".toLowerCase();//大写转小写
        System.out.println(s1);
        System.out.println(s2);
        if (s1 == s2) {
            System.out.println("s1 == s2");
        } else {
            System.out.println("s1 != s2");
        }
/* 编译结果
    hello
    hello
    s1 != s2
    两个String,它们的内容是相同的,但分别指向不同的对象,结果为false
*/         

要判断引用类型的变量内容是否相等,必须使用equals()方法:
        String s1 = "hello";
        String s2 = "HELLO".toLowerCase();
        System.out.println(s1);
        System.out.println(s2);
        if (s1.equals(s2)) {
            System.out.println("s1 == s2");
        } else {
            System.out.println("s1 != s2");
        }
/*编译结果
    hello
    hello
    s1 == s2
*/        

注意:执行语句s1.equals(s2)时,如果变量s1为null,会报NullPointerException:
        String s1 = null;
        if (s1.equals("hello")) {
            System.out.println("hello");
        }
// Exception in thread "main" java.lang.NullPointerException        

要避免NullPointerException错误,可以利用短路运算符&&,或者将一定不是null的对象放到前面:
        String s1 = null;
        if (s1 != null && s1.equals("hello")) {
            System.out.println("hello");
        }

switch多重选择
除了if语句外,还有一种条件判断,是根据某个表达式的结果,分别去执行不同的分支。
switch语句根据switch (表达式)计算的结果,跳转到匹配的case结果,然后继续执行后续语句,直到遇到break结束执行,当没有匹配到任何case时,执行最后的default。
        int option = 99;
        switch (option) {//条件
        case 1://匹配值
            System.out.println("Selected 1");
            break;
        case 2:
            System.out.println("Selected 2");
            break;
        case 3:
            System.out.println("Selected 3");
            break;
        default://匹配到任何case
            System.out.println("Not selected");
            break;
        }

注意:使用switch时,注意case语句并没有花括号{ } ,而且,case语句具有“穿透性”,漏写break将导致意想不到的结果。但是只要保证有break,case的顺序不影响程序逻辑。
//如果有几个case语句执行的是同一组语句块,可以这么写
        switch (option) {
        case 1:
            System.out.println("Selected 1");
            break;
        case 2://忽略 break
        case 3:
            System.out.println("Selected 2, 3");
            break;
        default:
            System.out.println("Not selected");
            break;
        }

switch语句还可以匹配字符串。字符串匹配时,是比较“内容相等”:
        String fruit = "apple";
        switch (fruit) {
        case "apple":
            System.out.println("Selected apple");
            break;
        case "pear":
            System.out.println("Selected pear");
            break;
        case "mango":
            System.out.println("Selected mango");
            break;
        default:
            System.out.println("No fruit selected");
            break;
        }

编译检查
使用IDE时,可以自动检查是否漏写了break语句和default语句。
在Eclipse中,选择Preferences - Java - Compiler - Errors/Warnings - Potential programming problems,将以下检查标记为Warning:
‘switch‘ is missing ‘default‘ case
‘switch‘ case fall-through
当switch语句存在问题时,即可在IDE中获得警告提示。

Java12中的switch
从Java 12开始,switch语句升级为更简洁的表达式语法,使用类似模式匹配(Pattern Matching)的方法,保证只有一种路径会被执行,并且不需要break语句:
        String fruit = "apple";
        switch (fruit) {
        case "apple" -> System.out.println("Selected apple");
        case "pear" -> System.out.println("Selected pear");
        case "mango" -> {
            System.out.println("Selected mango");
            System.out.println("Good choice!");
        }
        default -> System.out.println("No fruit selected");
        }

新语法使用 -> ,如果有多条语句,需要用 { } 括起来。不要写break语句,因为新语法只会执行匹配的语句,没有穿透效应,同时新的switch语法,可以直接返回值。
        String fruit = "apple";
        int opt = switch (fruit) {
            case "apple" -> 1;
            case "pear", "mango" -> 2;
            default -> 0;
        }; // 注意赋值语句要以;结束
        System.out.println("opt = " + opt);

注意:由于switch表达式是作为Java 12的预览特性实现的,编译的时候,还需要给编译器加上参数,这样才能正常编译。
javac --source 12 --enable-preview Main.java

原文地址:https://www.cnblogs.com/nsss/p/11417450.html

时间: 2024-10-09 02:29:53

9-分支选择的相关文章

正则表达式-python-无捕获分组与分支选择

无捕获分组 当你要将一部分规则作为一个整体对它进行某些操作,比如指定其重复次数时,你需要将这部分规则用 (?:) 把它包围起来. 分支条件 在正则表达式中,分支条件是一个很常用的条件. 满足条件A 或者 满足条件B  ,这个时候我们就可以使用分支条件了. 分支条件使用的符号为 | 代码示例: 我们突然发现,它把字符串分割成两个部分了 I have a dog  和  cat    而不是    I have a dog  和   I have a cat 如果我们只要区分dog和cat呢?正则要

SpringBoot系列——利用系统环境变量与配置文件的分支选择实现“智能部署”

前言 通过之前的博客:SpringBoot系列——jar包与war包的部署,我们已经知道了如果实现项目的简单部署,但项目部署的时候最烦的是什么?修改成发布环境对应的配置!数据库连接地址.Eureka注册中心地址.Redis服务地址等,部署环境不一样,打包的时候就要改成对应的配置:常用的环境有本地开发环境dev,本地测试环境dev-test,生产测试环境prod-test,生产环境prod: 开发的时候我们用dev,项目直接运行,不用改配置:发布本地测试环境的时候,打包之前我们要先改成对应配置:上

(一)Python入门-4控制语句:02单分支选择结构-条件表达式详解

一:选择结构介绍 选择结构通过判断条件是否成立,来决定执行哪个分支.选择结构有多种形式,分为:单分 支.双分支.多分支.流程图如下: 二:单分支选择结构 if语句单分支结构的语法形式如下: if 条件表达式: 语句/语句块 其中:1条件表达式:可以是逻辑表达式.关系表达式.算术表达式等. 2语句/语句块:可以是一条语句,也可以是多条语句.多条语句,缩进必须对齐一致. 三:条件表达式详解 在选择和循环结构中,条件表达式的值为 False的情况如下: False.0.0.0.空值 None.空序列对

Mybatis的分支选择和In循环

Mybatis的分支选择: <choose> <when test="patientNo != null and patientNo != ''"> and ipi.patient_no = #{patientNo} </when> <otherwise> <if test="patientName != null and patientName != ''"> and ipi.patient_name l

PowerShell随笔2_分支 选择 循环

PowerShell特殊变量: PowerShell的特殊变量由系统自动创建.用户自定义的变量名称应该不和特殊变量相同. $^ :前一命令行的第一个标记 $$ :前一命令行的最后一个标记 $_ :表示表示当前循环的迭代变量. $? :前一命令执行状态,成功(Ture) 或者 失败(False) $Args :为脚本或者函数指定的参数 $Error :错误发生时,错误对象存储于变量 $Error 中 $Foreach :引用foreach循环中的枚举器 $Home :用户的主目录 $Host :引

java---三目运算、分支选择结构

1.三目运算 2.switch和if  else ----else后不跟判断条件

python 练习题练习题2--多分支选择

题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%:20万到40万之间时,高于20万元的部分,可提成5%:40万到60万之间时高于40万元的部分,可提成3%:60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成

shell脚本编程的选择分支结构

选择执行结构: if语句单分支结构:如果条件为真,则执行then后的命令,否则,不做任何操作: if CONDITION :then STATEMENT fi 或 if CONDITION ; then STATEMENT1 STATEMENT2 ... fi 注意:想要执行then后面的STATEMENTS,前提条件是CONDITION部分为真: if语句的双分支结构:如果条件为真,就执行then后面的命令:否则就执行else后面的命令: if CONDITION ; then STATEME

实验三——for 语句及分支结构else-if

1.本次课学习到的知识点:(1)for语句的使用以及循环功能 (2)else-if语句是最常用的实现多分支的方法,一般形式为 if (表达式1) 语句1: else if(表达式2) 语句2: … else if(表达式n-1) 语句n-1: else 语句n: 2. 实验过程中遇到的问题及解决方法: 问题:对于符号的运算.分母有规律的增加的程序还是不太会编,例如:求n项分式之和的程序.解决方法:参考书上例题以及课外资料已经解决 3. 实验心得体会 体会:我认为编程的难度在不断的增加,书上一部分

作业四 分支结构

知识点:(1)int i;    int char1,digit,other;    char ch;    char1=digit=other=0; 如果要统计英文字母.数字字符或其他字符的个数,需要用到以上的编译步骤. (2)算平均成绩和分等级可以用if语句也可以用switch语句,具体用法:if:if(grade>=90){              A++;              total_A=total_A+grade;}     else if(grade>=80){