3.2 switch语句

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

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

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

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

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

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

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

3.2.1 switch语句概述

  switch语句的语法形式如下。

  1. switch(表达式){
  2. case 常量1:
  3. 代码块A;
  4. break;
  5. case 常量2:
  6. 代码块B;
  7. break;
  8. default:
  9. 代码块X;
  10. break;
  11. }

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

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

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

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

3.2.2 switch语句的使用

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

  1. import java.util.Scanner;
  2. class TestSwitch1{
  3. public static void main(String[] args) {
  4. int score = -1; //美术学习班结业评价
  5. Scanner input = new Scanner(System.in);
  6. System.out.print("请输入张明美术学习班结业评价(只能输入1、2、3、4):");
  7. score = input.nextInt(); //从控制台获取张明美术学习班结业评价
  8. switch(score){
  9. case 1:
  10. System.out.println("暑假带张明去九寨沟旅游!");
  11. break;
  12. case 2:
  13. System.out.println("奖励一个变形金刚!");
  14. break;
  15. case 3:
  16. System.out.println("不奖不罚,需要继续努力!");
  17. break;
  18. case 4:
  19. System.out.println("负责家里洗碗一周!");
  20. break;
  21. default:
  22. System.out.println("输入错误,请重新输入!");
  23. break;
  24. }
  25. }
  26. }

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

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

3.2 switch语句 - 图1
图3.5 去除break的switch语句

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

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

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

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

  1. switch(score){
  2. case 1:
  3. case 2:
  4. System.out.println("暑假带张明去九寨沟旅游!");
  5. break;
  6. case 3:
  7. case 4:
  8. System.out.println("不奖不罚,需要继续努力!");
  9. break;
  10. default:
  11. System.out.println("输入错误,请重新输入!");
  12. break;
  13. }