9-分支选择

Posted nsss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于9-分支选择的主要内容,如果未能解决你的问题,请参考以下文章

if选择结构

樱桃选择合并

Xcode 服务:选择 Git 分支

LABVIEW条件结构,添加分支,为啥提示:条件结构,选择器值存在错误类型

选择语句(分支语句)——if else

jenkins实现手动选择分支构建项目