3.2 switch语句

  编写程序,完成如下需求。

  学生张明参加了少年宫组织的美术学习班,到了学习班结束的时候,张明的父亲告诉张明:

  如果学习班结业评价是1等,则会“暑假带张明去九寨沟旅游!”;

  如果学习班结业评价是2等,则会“奖励一个变形金刚!”;

  如果学习班结业评价是3等,则会“不奖不罚,需要继续努力!”;

  如果学习班结业评价是4等,则会“负责家里洗碗一周!”。

  这样的需求,通过前面介绍的if语句完全可以解决,但是作为程序员,总会觉得有些麻烦,有些不舒服。接下来,通过switch语句解决这个问题。

3.2.1 switch语句概述

  switch语句的语法形式如下。

switch(表达式){

    case  常量1:

        代码块A;

        break;

    case  常量2:

        代码块B;

        break;


    default:

        代码块X;

        break;

}
copy

  switch关键字表示“开关”,其针对的是后面表达式的值。尤其需要注意的是,这个表达式的值只允许是byte、short、int和char类型(在JDK 7.0中表达式的值可以是String)类型。

  case后必须要跟一个与表达式类型对应的常量,case可以有多个,且顺序可以改变,但是每个case后面的常量值必须不同。当表达式的实际值与case后的常量相等时,其后的代码块就会执行。

  default表示当表达式的实际值没有匹配到前面对应的任何case常量,default后面的默认代码块会被执行,default通常放在末尾。

  break表示跳出当前结构,必须注意不要忘记。

3.2.2 switch语句的使用

  根据前面的需求,使用switch语句编写代码如下。

import java.util.Scanner;

class TestSwitch1{

    public static void main(String[] args) {

        int score = -1;               //美术学习班结业评价

        Scanner input = new Scanner(System.in);

        System.out.print("请输入张明美术学习班结业评价(只能输入1、2、3、4):");

        score = input.nextInt();          //从控制台获取张明美术学习班结业评价



        switch(score){

            case 1:

                   System.out.println("暑假带张明去九寨沟旅游!");

                break;

            case 2:

                System.out.println("奖励一个变形金刚!");           

                break;

            case 3:

                System.out.println("不奖不罚,需要继续努力!");

                break;

            case 4:

                System.out.println("负责家里洗碗一周!");

                break;

            default:

                System.out.println("输入错误,请重新输入!");

                break;

        }

    }

}
copy

  通过观察可以看出,switch语句的判断条件只能是等值判断,而且对表达式的类型有要求。

  前面提到过,语句块后面需要跟上break,不能忘记,如果忘了会出现什么情况呢?把上面代码中的break语句全部去掉,编译运行程序,程序运行结果如图3.5所示。

图3.5 去除break的switch语句

  从运行结果可以看出,当用户输入“2”后,执行case 2后面的代码块,而且将不再判断case 2之后的所有case语句,直接执行后面所有的代码块。利用这个特点,可以完成针对几个不同的值,执行一类代码的操作。例如上面的例子,需求进行了如下调整:

  如果学习班结业评价是1等或2等,则会“暑假带张明去九寨沟旅游!”;

  如果学习班结业评价是3等或4等,则会“不奖不罚,需要继续努力!”。

  则对应的代码可以修改为以下形式(仅显示部分代码)。

switch(score){

    case 1:

    case 2:

        System.out.println("暑假带张明去九寨沟旅游!");                  

           break;

    case 3:

    case 4:

        System.out.println("不奖不罚,需要继续努力!");

        break;

    default:

        System.out.println("输入错误,请重新输入!");

        break;

}
copy