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;
}
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;
}
}
}
通过观察可以看出,switch语句的判断条件只能是等值判断,而且对表达式的类型有要求。
前面提到过,语句块后面需要跟上break,不能忘记,如果忘了会出现什么情况呢?把上面代码中的break语句全部去掉,编译运行程序,程序运行结果如图3.5所示。
从运行结果可以看出,当用户输入“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;
}