switch选择结构

1.为什么使用switch选择结构

问题:

小明参加计算机编程大赛:

​ 如果获得第一名,将参加麻省理工大学组织的一个月夏令营;

​ 如果获得第二名,将奖励惠普笔记本电脑一部;

​ 如果获得第三名,将奖励移动硬盘一个;

​ 否则,没有任何奖励。

分析:

这个问题可以用多重if选择结构来解决。的确,使用多重if选择结构完全可以解决,代码如示列1所示。

示列1:

public class Compete {
    public static void main(String[] args) {
        //名次
        int mingCi = 3;
        if (mingCi == 1){
            System.out.println("参加麻省理工大学组织的一个月夏令营");
        }else if (mingCi == 2){
            System.out.println("奖励惠普笔记本电脑一部");
        }else if (mingCi == 3){
            System.out.println("奖励移动硬盘一个");
        }else{
            System.out.println("没有任何奖励");
        }
    }
}

示列1解决了这个问题,可是看上去很繁琐。这个问题跟前面的问题比起来有什么不同?显然,这个问题是等值的判断,之前的问题是区间判断。对此java提供了另外一种结构,可以方便解决等值判断问题,这就是switch选择结构。

2.什么是switch选择结构

switch选择结构可以更好的解决等值判断问题。

语法:

switch(表达式{

case 常量 1 :

//代码块;

break;

case 常量2 :

//代码块2;

break;

default:

//代码块n;

break;

}

这里switch、case、default、break都是java的关键字。

解释:

  • switch:表示 "开关" ,这个开关就是switch关键字后面小括号里的表达式的值,JDK1.7后,switch语句小括号里可以是int、short、byte、char、枚举、String类型表达式。
  • case:表示 "情况、情形",case可以是int、short、byte、char、枚举、String类型,通常是一个固定的值。case块可以有多个,顺序可以改变,但是每个case后常量的值必须各不相同。
  • deftult:表示 "默认" ,即其他情况都不满足。default后要紧跟冒号。default块和case块的先后顺序可以变动,不会影响程序执行的结果。通常,default块放在末尾,也可以省略
  • break:表示 "停止" ,即跳出当前循环。

##### 知道了switch选择结构的语法,那么它的执行过程是怎么样的呢?具体如下所述:

​ 先计算并获得switch后面的小括号,然后将计算结果顺序与每个case后的常量比较,当二者相等时,执行这个case块中的代码;当遇到break时,就跳出switch选择结构,执行switch选择结构之后的代码。如果没有任何一个case后的常量与switch后的小括号的值相等,则执行switch末尾部分的default块中的代码。

3.如何使用switch选择结构

了解了switch选择结构的语法以及它的执行过程之后,下面就来用switch选择结构来解决等值判断的问题,具体代码如示列2所示。

示列2:

public class Compete2 {
    public static void main(String[] args) {
        //名次
        int mingCi = 1;
        switch (mingCi){
            case 1:
                System.out.println("创建麻省理工大学的1个月夏令营");
                break;
            case 2:
                System.out.println("奖励惠普笔记本电脑一部");
                break;
            case 3:
                System.out.println("奖励移动硬盘一个");
                break;
            default:
                System.out.println("没有任何奖励");
                break;
        }
    }
}
程序运行结构如下:

可见,括号中的mingCi的值为1,与第一个case块中的常量值匹配,因此执行它后面的代码,输出 "参加麻省理工大学组织的一个月夏令营" ,然后执行语句 "break;" ,执行结果是跳出整个switch选择结构。

与示列1比起来,示列2看起来更清晰一些,它们完成的功能其实是完全一样的。但是,并非所有的多重if选择结构都可以有switch选择结构代替。通过观察,可以看出,switch选择结构的条件只能是等值的判断,而且只能是整型或字符型的等值判断。也就是说,switch选择结构只能用于判断一个整型变量或表达式是否等于某个整数值的情况,或者一个字符型或表达式是否等于某个字符的情况,并且每一个case后面的常量值都不同。而多重if选择结构既可以用于判断条件是等值的情况,也可以用于判断条件是区间的情况。

如果这里省略了break,结果会怎么样呢

示列3:

public class Compete2 {
    public static void main(String[] args) {
        //名次
        int mingCi = 1;
        switch (mingCi){
            case 1:
                System.out.println("创建麻省理工大学的1个月夏令营");
            case 2:
                System.out.println("奖励惠普笔记本电脑一部");
            case 3:
                System.out.println("奖励移动硬盘一个");
            default:
                System.out.println("没有任何奖励");
        }
    }
}

程序运行结果如下:

虽然break语句可以省略的,但是省略后会带来一些问题。省略break的后果如下:当某个case后的常量值与switch后小括号的值匹配时,执行该case块的代码,后面的case就不再进行条件判断,而直接执行后面所有的case块中的代码,直到遇到break结束。所以在编写switch选择结构时不要忘记在每个case块后加一个 "breka;" 用来跳出switch选择结构。

注意:

每个case后的代码块可以有多个语句,既可以有一组语句,而且不需要用 "{ }"括起来。case和default后都有一个冒号,不能漏写,否则编译不通过。对于每个case的结尾,都要想一想是否需要从这里跳出整个switch选择结构。如果循环,一定不要忘记写 "break;"。

最后修改:2021 年 11 月 26 日
如果觉得我的文章对你有用,请随意赞赏