选择结构(续:switch语句)


选择结构(续:switch语句)

一、switch语句

语句格式:

switch(表达式){
    case 常量1:
        语句体1;
        break;
    case 常量2:
        语句体;
        break;
    ...
    case 常量n:
        语句体n;
        break;
    default:
        语句体n+1:
        break;
}
格式解释:
   switch表达式的结果可以是哪些数据类型?(面试题)
    表达式的结果可以是:byte,short,int,char,枚举,String(其中一种)
    在JDK1.5以后可以是枚举类型
    在JDK1.7以后可以是String
名词解释:
    case: 后面跟的是要和表达式进行比较的值(常量),如果说匹配到了对应的case的值,那么就执行相对应的语句体,		   而且这个语句的部分可以是一条语句,也可以是多条语句
    break: 表示中断的意思,结束的意思,可以结束switch语句
    default: 表示默认的意思,当表达式的值与所有的case的值都不匹配的时候,最后才执行default中的语句体。				(与if-else if...-else中最后else对应着去理解)
执行流程:
    1、计算表达式的值
    2、拿着这个计算好的值与case相对应的值(常量)按照顺序从上往下依次进行比较,如果有相同
        的值,就开始执行此位置的case中的语句体内容。
    3、当语句体的内容执行完毕后,会紧接执行break语句,执行break语句就代表着咱们这个
        switch选择结构的结束(跳出switch选择)
    4、当第二步从上往下去匹配case的值的时候,如果没有匹配到相应的值,就会执行default
        语句中语句体内容,最后跳出switch语句。
注意事项:
     1、case后面的值不能有重复的
     2、default语句可以进行省略,一般情况下,不建议删除。
     3、case 后面紧跟着的只能是常量,或者常量之间的运算,不能是变量
     4、break语句可以省略,代码也不会报错,一般情况下,不建议省略,如果你省略了,结果可能不是你想要的结果当			匹配到break语句省略的那个case的时候,首先会执行对应的语句体,然后从匹配到的case一直运行到有break		 语句为止。
     5、default语句可以放在任意地方吗?
        可以,因为我们的switch语句执行流程是严格按照先在所有的case中进行匹配,当所有的case都不匹配的时			候,最后再去执行default语句,这和你default语句写的顺序没有关系。
案例:(假设只能消费与口袋一样多钱的东西,只能买一样)
    可乐 3
    旺仔牛奶 5
    红牛 6
    农夫山泉 2
    脉动 4

用switch语句实现购物,键盘录入身上带了多少钱。
import java.util.Scanner;
public class SwitchDemo1 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        //可乐 3, 旺仔牛奶 5, 红牛 6, 农夫山泉 2, 脉动 4
        //雪碧 3
        //键盘录入说明我现在身上有多少钱
        System.out.println("您身上带了多少钱:");
        int money = sc.nextInt();

        switch (money){
            default:
                System.out.println("该超市没有对应价格的饮料,下次再来瞅瞅");
                break;
            case 3:
                System.out.println("购买可乐,欢迎下次光临!");
                break;
            case 5:
                System.out.println("购买旺仔牛奶,欢迎下次光临!");
                break;
            case 6:
                System.out.println("购买红牛,欢迎下次光临!");
                break;
            case 2:
                System.out.println("购买农夫山泉,欢迎下次光临!");
                break;
            case 4:
                System.out.println("购买农夫山泉,欢迎下次光临!");
                break;
           default :
               System.out.println("该超市没有对应价格的饮料");
               break;
        }
    }
}


/*
    模拟做单项选择题,根据你的选择,给出对应的答案。(表达式是字符的情况)

    数加学院怎么样?

    A: 非常好   B: 很好    C: 优秀    D: 无与伦比

 */
import java.util.Scanner;
public class SwitchTest1 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        System.out.println("题目:数加学院怎么样?");
        System.out.println("请输入你选择的选项(A/B/C/D)其中一个");
        String s = sc.next();

        switch (s){
            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;
            default:
                System.out.println("您输入的选项有误");
                break;
        }
    }
}
/*
    用switch语句实现键盘录入月份,输出对应的季节

    春季:3-5
    夏季:6-8
    秋季:9-11
    冬季:12 - 2

 */
import java.util.Scanner;
public class SwitchTest2 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入你想知道季节的月份(1-12):");
        int month = sc.nextInt();

        switch (month){
            case 1:
                System.out.println("冬季");
                break;
            case 2:
                System.out.println("冬季");
                break;
            case 3:
                System.out.println("春季");
                break;
            case 4:
                System.out.println("春季");
                break;
            case 5:
                System.out.println("春季");
                break;
            case 6:
                System.out.println("夏季");
                break;
            case 7:
                System.out.println("夏季");
                break;
            case 8:
                System.out.println("夏季");
                break;
            case 9:
                System.out.println("秋季");
                break;
            case 10:
                System.out.println("秋季");
                break;
            case 11:
                System.out.println("秋季");
                break;
            case 12:
                System.out.println("冬季");
                break;
            default:
                System.out.println("您输入的月份有误");
                break;
        }

    }
}
/*
        看程序写结果
 */
public class SwitchTest3 {
    public static void main(String[] args) {
        int x = 2;
        int y = 3;
        switch (x) {
            default:
                y++;  //y=4
                break;
            case 3:
                y++;
            case 4:
                y++;
        }
        System.out.println("y=" + y);

    }
}

二、if语句和switch语句各自使用场景

if语句:①针对结果是boolean类型的判断

? ②针对一个范围的判断

? ③针对几个常量值的判断

switch语句:①针对几个常量值的判断

? ②开发中优先选择if语句格式,再根据实际需求来选择switch

三、if语句和switch语句的嵌套

/*
        switch语句与if语句嵌套使用

        买饮料的案例
 */
import java.util.Scanner;
public class SwitchIfDemo1 {
    public static void main(String[] args) {

        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        //可乐 3, 旺仔牛奶 5, 红牛 6, 农夫山泉 2, 脉动 4
        //键盘录入数据表示身上有多少钱
        System.out.println("请输入您身上带了多少钱:");
        int money = sc.nextInt();

        if(money>=2 & money<100){
            System.out.println("欢迎光临!!!");

            switch (money){
                case 2:
                    System.out.println("购买农夫山泉");
                    break;
                case 3:
                    System.out.println("购买可乐");
                    break;
                case 4:
                    System.out.println("购买脉动");
                    break;
                case 5:
                    System.out.println("购买旺仔牛奶");
                    break;
                case 6:
                    System.out.println("购买红牛");
                    break;
                default:
                    System.out.println("没有你想要的饮料");
                    break;
            }
        }else if(0=100){
            System.out.println("随便挑");
        }else {
            System.out.println("你是个穷鬼,下次再来吧");
        }

    }
}