java系列:嵌套分支和switch分支结构

123 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情

嵌套分支

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支,规范:不要超过三层(可读性不好)

基本语法:

if(){
    if(){
        //if-else……
    }else{
        //if-else
    }
}

嵌套分支案例:NestedIf.java

import java.util.Scanner;
​
​
public class NestedIf {
    public static void main(String[] args) {
        //创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的性别,0:男,1:女");
        int gender = scanner.nextInt();
        char gen = scanner.next().charAt(0);
        System.out.println("请输入您的成绩:");
        double score = scanner.nextDouble();
        if (gender == 0){
            System.out.println("您进入的是男子组");
            if (score > 8.0){
                System.out.println("恭喜您进入决赛");
            }
            else {
                System.out.println("您被淘汰了");
            }
        }else {
            System.out.println("您进入的是女子组");
            if (score > 8.0){
                System.out.println("恭喜您进入决赛");
            }
            else {
                System.out.println("您被淘汰了");
            }
        }
​
    }
}

switch分支结构

基本语法:

switch(表达式){
    case 常量一:
        语句块一;
        break;
    case 常量二;
        语句块二;
            break;
    default;
        default语句块;
        break;
}

解析:

  1. switch关键字,表示switch分支
  2. 表达式对应一个值
  3. case 常量一:当表达式等于常量一时,就执行语句块一
  4. break:表示退出switch
  5. 如果和case 常量一匹配,就执行语句块一,如果没有匹配,就继续匹配case 常量二
  6. 如果都没有匹配上,执行defaule

案例:Switch01.java

import java.util.Scanner;
​
​
public class Switch01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入:");
        char week = scanner.next().charAt(0);
        switch (week){
            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;
            case 'f':
                System.out.println("今天星期六,放松一下吧");
                break;
            case 'g':
                System.out.println("今天星期日,放松一下吧");
                break;
            default:
                System.out.println("您的输入不正确,请重新输入!");
​
​
​
        }
​
​
    }
}

编写一个程序,该程序可以接受一个字符,比如a,b,c,d,e,f,g

a表示星期一,b表示星期二

根据用户的输入显示相依的信息,要求使用switch完成

switch细节

  1. 表达式数据类型,应该和case后的常量类型一致,或者可以自动转成可以相互比较的类型,比如输入的时字符,而常量是int
  2. switch(表达式)中的表达式的返回值必须是(byte short int char enum(枚举类型) String)
  3. case句子中的值必须是常量,而不能是变量
  4. default子句是可以选的,当没有匹配的case时,执行default
  5. break语句用来在执行完一个case分支后使程序跳出switch语句块,如果没有写break,程序会顺序执行到switch结尾

switch练习:SwitchExercise.java

import java.util.Scanner;
​
public class SwitchExercise {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入a-e");
        char c1 = scanner.next().charAt(0);
        System.out.println("请输入成绩");
        int achievement = scanner.nextInt();
        switch (c1){
            case 'a':
                System.out.println("A");
                break;
            case 'b':
                System.out.println("B");
                break;
            case 'c':
                System.out.println("C");
                break;
            case 'd':
                System.out.println("D");
                break;
            case 'e':
                System.out.println("E");
                break;
            default:
                System.out.println("您的输入不正确,请重新输入!");
        }
        if (achievement >= 0 & achievement <= 100){
            switch(achievement/60){
                case 0:
                    System.out.println("不及格");
                    break;
                case 1:
                    System.out.println("及格");
                    break;
                default:
                    System.out.println("输入错误,请重新输入");
            }
        }
        else {
            System.out.println("输入有误");
        }
​
​
​
​
​
    }
}

使用switch把小写类型的char型转为大写(键盘输入)值转换a,b,c,d,e,其他的输出other

对于学生成绩大于60的输出合格,低于60的输出不合格(输入的成绩不能大于100)提示,成绩/60

switch练习:SwitchExercise02.java

import java.util.Scanner;
public class SwitchExercise02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入月份:");
        int month = scanner.nextInt();
​
        switch(month){
            case 3:
            case 4:
            case 5:
                System.out.println("春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋季");
                break;
            case 12:
            case 1:
            case 2:
                System.out.println("冬季");
                break;
            default:
                System.out.println("请输入正确的月份");
​
        }
    }
}

根据用于指定月份打印该月所属的季节,345春季,678夏季,91011秋季,1212冬季

switch和if的比较

  1. 如果判断的具体数值不多,而且符合byte,short,int,char,enum,String这六种类型,虽然两种语句都可以使用,建议使用switch语句
  2. 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的适用范围广泛