Java switch-case选择结构(二)

案例5:根据指定的月份输出对应季节

    /**
     * 3,4,5    春季
     * 6,7,8    夏季
     * 9,10,11    秋季
     * 12,1,2    冬季
     *
     * @param month
     */
    public static void switchMonth(int month) {
        switch (month) {
            case 1:
            case 2:
            case 12:
                System.out.println("冬季");
            case 3:
            case 4:
            case 5:
                System.out.println("春季");
            case 6:
            case 7:
            case 8:
                System.out.println("夏季");
            case 9:
            case 10:
            case 11:
                System.out.println("冬季");
        }
    }

使用if-else实现

if ((month == 1) || (month == 2) || (month == 12)) {
    System.out.println("冬季");
} else if ((month == 3) || (month == 4) || (month == 5)) {
    System.out.println("春季");
} else if ((month == 6) || (month == 7) || (month == 8)) {
    System.out.println("夏季");
} else if ((month == 9) || (month == 10) || (month == 11)) {
    System.out.println("秋季");
} else {
    System.out.println("你输入的月份有误");
}

if-else语句与switch-case语句比较

  • 结论:凡是使用switch-case的结构都可以转换为if-else结构。反之,不成立。
  • 开发经验:如果既可以使用switch-case,又可以使用if-else,建议使用switch-case。因为效率稍高。
  • 细节对比:

       if-else语句优势

  • if语句的条件是一个布尔类型值,if条件表达式为true则进入分支,可以用于范围的判断,也可以用于等值的判断,使用范围更广。
  • switch语句的条件是一个常量值(byte,short,int,char,枚举,String),只能判断某个变量或表达式的结果是否等于某个常量值,使用场景较狭窄。

       switch语句优势

  • 当条件是判断某个变量或表达式是否等于某个固定的常量值时,使用if和switch都可以,习惯上使用switch更多。因为效率稍高。当条件是区间范围的判断时,只能使用if语句。
  • 使用switch可以利用穿透性,同时执行多个分支,而if...else没有穿透性。

案例6、一个整数,判断是正数、负数、还是零。

    public static void IfOrSwitchDemo(int num) {
        if (num > 0) {
            System.out.println(num + " 是正数");
        } else if (num < 0) {
            System.out.println(num + " 是负数");
        } else {
            System.out.println(num + " 是零");
        }
    }

练习1、编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的值输出其对应的成绩等级:

score>=90           等级:  A
70<=score<90        等级:  B    
60<=score<70        等级:  C
score<60            等级:  D

 

    public static void switchscore(int score) {
        char grade;//记录学生等级
        //if...else
        if (score >= 90) {
            grade = 'A';
        } else if (score >= 70) {
            grade = 'B';
        } else if (score >= 60) {
            grade = 'C';
        } else {
            grade = 'D';
        }
        System.out.println("学生成绩为" + score + ",对应的等级为 " + grade);
        //switch
        switch (score / 10) {
            case 9:
            case 10:
                grade = 'A';
            case 7:
            case 8:
                grade = 'B';
            case 6:
                grade = 'C';
            default:
                grade = 'D';
        }
        System.out.println("学生成绩为" + score + ",对应的等级为 " + grade);
    }

练习2:

编写一个程序,为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期,每年用一个动物代表:rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、rooster、dog、pig。
提示:2022年:虎   2022 % 12 == 6

  public static void main(String[] args){
        //从键盘输入一个年份
        Scanner input = new Scanner(System.in);
        System.out.print("请输入年份:");
        int year = input.nextInt();
        input.close();

        //判断
        switch(year % 12){
            case 0:
                System.out.println(year + "是猴年");
                break;
            case 1:
                System.out.println(year + "是鸡年");
                break;
            case 2:
                System.out.println(year + "是狗年");
                break;
            case 3:
                System.out.println(year + "是猪年");
                break;
            case 4:
                System.out.println(year + "是鼠年");
                break;
            case 5:
                System.out.println(year + "是牛年");
                break;
            case 6:
                System.out.println(year + "是虎年");
                break;
            case 7:
                System.out.println(year + "是兔年");
                break;
            case 8:
                System.out.println(year + "是龙年");
                break;
            case 9:
                System.out.println(year + "是蛇年");
                break;
            case 10:
                System.out.println(year + "是马年");
                break;
            case 11:
                System.out.println(year + "是羊年");
                break;
            default:
                System.out.println(year + "输入错误");
        }
    }

练习3:押宝游戏

随机产生3个1-6的整数,如果三个数相等,那么称为“豹子”,如果三个数之和大于9,称为“大”,如果三个数之和小于等于9,称为“小”,用户从键盘输入押的是“豹子”、“大”、“小”,并判断是否猜对了
提示:随机数  Math.random()产生 [0,1)范围内的小数     如何获取[a,b]范围内的随机整数呢?(int)(Math.random() * (b - a + 1)) + a

    public static void yabap() {
        //生成随机数
        int a = (int) (Math.random() * 6 + 1);
        int b = (int) (Math.random() * 6 + 1);
        int c = (int) (Math.random() * 6 + 1);
        //押宝
        Scanner scanner = new Scanner(System.in);
        System.out.println("快压(豹子 大 小)");
        String ya = scanner.next().trim();
        scanner.close();
        //擦拭结果
        boolean res = false;
        switch (ya) {
            case "豹子":
                res = a == b && b == c;
                break;
            case "大":
                res = a + b + c > 9;
                break;
            case "小":
                res = a + b + c < 9;
                break;
            default:
                System.out.println("输入有误");
        }
        System.out.println("a,b,c分别是:" + a + "," + b + "," + c);
        System.out.println(res ? "猜中了" : "猜错了");
    }
posted @ 2023-03-15 18:11  晓枫的春天  阅读(201)  评论(0编辑  收藏  举报