Java学习-流程控制03选择结构

选择结构

  • if单分支
  • if双分支
  • if多分支
  • if嵌套
  • switch多分支

if单分支

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

    语法结构:

    if(布尔表达式){

    ​ //如果布尔表达式值为true执行

    }

    package com.struct.www;
    
    import java.util.Scanner;
    
    public class IfDemo01 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("请输入内容:");
            String str = scanner.nextLine();
            
            //equals判断两个字符串是否相等,不要使用==
            if(str.equals("hello")){
                System.out.println("输入的内容是hello");
            }
    
            scanner.close();
        }
    }
    

if双分支

  • 那现在有个需求,公司要收购一个软件,成功了,给人支付100万元,没有成功,自己找人开发。这样的需求用一个if无法搞定,我们需要两个判断,需要一个双分支结构,于是有了if-else结构。

    语法结构:

    if(布尔表达式){

    ​ //如果布尔表达式的值为true执行

    }else{

    ​ //如果布尔表达式的值为false执行

    }

    package com.struct.www;
    
    import java.util.Scanner;
    
    public class IfDemo02 {
        public static void main(String[] args) {
            //考试分数大于60分,通过,否则不通过
            Scanner  scanner = new Scanner(System.in);
    
            System.out.println("请输入分数:");
            int score = scanner.nextInt();
    
            if(score>60){
                System.out.println("通过");
            }else{
                System.out.println("未通过");
            }
    
            scanner.close();
        }
    }
    

if多分支结构

  • 我们发现刚才的代码不符合现实情况,现实情况还可能存在多个等级ABCD,存在区间多判断,所以我们用多分支来解决这类问题。

    语法结构:

    if(){

    }else if{

    }else if{

    }else{

    }

    package com.struct.www;
    
    import java.util.Scanner;
    
    public class IfDemo03 {
        public static void main(String[] args) {
            /*
            1.if语句至多有一个else,else在所有if和else if之后。
            2.if语句可以有else if,但是else if必须在else之前。
            3.一旦其中一个else if检测为true,其它的else if和else都会被忽略。
            */
            
            
            //考试分数大于60分,通过,否则不通过
            Scanner  scanner = new Scanner(System.in);
    
            System.out.println("请输入分数:");
            int score = scanner.nextInt();
    
            if(score>=60&&score<70){
                System.out.println("C");
            }else if(score>=70&&score<80) {
                System.out.println("B");
            }else if(score>80&&score<90){
                System.out.println("A");
            }else{
              System.out.println("A+");
            }
    
            scanner.close();
        }
    }
    

if嵌套

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

    语法结构:

    if(布尔表达式1){

    ​ if(布尔表达式2){

    ​ }

    }

思考?我们需要查找一个数,在1-100之间。

可以使用if嵌套语句,二分法查找。

package com.struct.www;
import java.util.Scanner;

public class IfDemo04 {
    public static void main(String[] args) {
        //创建一个扫描器,接收键盘输入的数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数(1-100之间):");
        int num = scanner.nextInt();

        if(num > 50 && num < 100){
            for (int i = 51; i < 100; i++) {
                if(num==i){
                    System.out.println("输入的数字是:"+num);
                    break;
                }
            }
        }else if(num < 50 && num > 0){
            for (int i = 1; i <= 50; i++) {
                if(num==i){
                    System.out.println("输入的数字是:"+num);
                    break;
                }
            }
        }else{
            System.out.println("输入的数字不合法");
        }
    }
}

switch多分支

  • 多分支好似有一个实现方式就是switch case语句。

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

  • switch语句中的变量类型:

    • byte、short、int 或者 char.
    • 从JDK7开始支持String类型
    • 支持枚举类型(enum)(后面讲解)
    package com.struct.www;
    
    public class SwitchDemo01 {
        public static void main(String[] args) {
            char grade = 'C';
    
            //注意:switch的参数只能是byte,short,char,int,enum,String类型
            
            switch (grade){
                case 'A':
                    System.out.println("优秀");
                    break;//可选
                case 'B':
                    System.out.println("良好");
                    break;
                case 'C':
                    System.out.println("及格");
                    break;
                case 'D':
                    System.out.println("不及格");
                    break;
                default:
                    System.out.println("输入有误,未知等级");
                    break;
            }
        }
    }
    

    可以查看一下反编译后的代码,看下底层是如何处理的

    package com.struct.www;
    
    public class SwitchDemo02 {
        public static void main(String[] args) {
            String name = "二哈";
    
            //JDK新特性,表达式结果可以是字符串!
            //字符本质是数字
    
            //反编译 Java -> 字节码 -> 反编译(可以使用IDEA)
            switch (name){
                case "二哈":
                    System.out.println("二哈");
                    break;
                case "tom":
                    System.out.println("tom");
                    break;
                default:
                    System.out.println("输入有误");
            }
        }
    }
    
  • switch穿透性

    package com.struct.www;
    
    public class SwitchDemo03 {
        public static void main(String[] args) {
            //switch穿透性
            //注意:switch穿透性并不是一个bug(问题),在某些情况下可以利用这个现象来提高程序运行效率
            //例如:有几个分支执行内容一致,那就只需要在最后一个分支加上break即可
    
            char grade = 'C';
    
            switch (grade){
                case 'A':
                    System.out.println("优秀");
                    break;//可选
                case 'B':
                    System.out.println("良好");
                case 'C':
                    System.out.println("及格");
                case 'D':
                    System.out.println("不及格");
                default:
                    System.out.println("输入有误,未知等级");
            }
        }
    }
    

    以上代码运行结果

    及格
    不及格
    输入有误,未知等级
    
  • case标签必须为字符串常量或字面量。

我们在学习过程中一定要多看源码,多去分析源码。

posted on 2025-05-27 12:09  burgess0x  阅读(28)  评论(0)    收藏  举报