
任务2.2 选择语句
语句是程序设计最基本的单位,前面给出的例子都是顺序执行的,是否能够改变程序执行的顺序呢?请看这个问题:给出一个年份,判断这个年份是否是闰年。

2-6 if语句
知识储备
2.2.1 if语句
1.if语句
一条if语句包含一个布尔表达式和一条或多条语句,语法格式如下所示。

【参数说明】
● 如果语句块1只有一条语句,可以省略大括号;如果语句块1有多条语句,那么就不可以省略大括号。但为了增强程序的可读性,最好不要省略。后面介绍的其他if语句同理。
● 如果布尔表达式的值为true,则执行if语句中的代码块,否则执行if语句后面的代码块。
if语句的流程图如图2-12所示。

图2-12 if语句流程图
【例2-11】 if语句的应用示例。



图2-13 例2-11程序运行结果
程序运行结果如图2-13所示。
2.if-else语句
当程序中含有分支选择时,需要使用if-else语句,语法格式如下。

【参数说明】
● else必须与if成对出现。
● 语句块1和语句块2可以是单条语句,也可以是复合语句。
● 该部分程序的执行过程为:若布尔表达式的值为true,则执行语句块1,否则执行语句块2。
If-else语句的流程图如图2-14所示。

图2-14 if-else语句流程图
【例2-12】 if-else语句的应用示例。

程序运行结果如图2-15所示。

图2-15 例2-12程序运行结果
3.嵌套if语句
现实问题比较复杂,单个的if-else语句可能不能解决问题,因此Java语言提供了if语句的嵌套功能,即一个if语句中还能有一个if语句。
语法格式如下。


嵌套if语句的流程图如图2-16所示。

图2-16 嵌套if语句流程图
【例2-13】 if-else语句嵌套的应用示例。

程序运行结果如图2-17所示。

图2-17 例2-13程序运行结果
2.2.2 switch语句

2-7 switch语句
if-else语句只能有两个分支,而switch语句可以有多个分支。Switch-case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支,因此又称为多分支选择语句。在要处理多种分支情况时,switch语句可以简化程序,使程序结构清楚明了,可读性强。switch语句的一般格式如下所示。


【参数说明】
● switch语句在运行时首先计算switch后面圆括号中“表达式”的值,这个值必须是整型或字符型。
● 各个case子句中的常量值的类型应与switch后面圆括号中“表达式”的值类型一致。
● 各case子句中的常量值具有唯一性,不允许重复。
● 语句块可以是单条语句,也可以是复合语句,复合语句不必用大括号括起来。
● default默认语句是可选的,可以省略。当表达式的值与case子句中常量的值都不匹配时,执行default默认语句。
switch语句的执行过程为:将表达式的值与各个case子句中的常量值进行比较,如果相等,则执行该case子句后面的语句块,执行完毕后,执行break语句,跳出switch语句;如果没有与表达式的值相等的case常量值,则执行default默认语句;如果没有default默认语句,则直接跳出switch语句,不进行任何操作。switch-case语句流程图如图2-18所示。

图2-18 switch-case语句流程图
【例2-14】 给定一个表示月份的数字,输出该月份的英文名称。


程序运行结果如图2-19所示。
如果代码中第3行改为“int month=13;”,将会执行default默认语句,程序运行结果如图2-20所示。

图2-19 例2-14程序运行结果

图2-20 例2-14程序运行结果(month=13)
【思考】若把break语句全部去掉,会发生什么呢?运行结果是什么?

去掉break语句后的程序运行结果如图2-21所示。

图2-21 例2-14程序运行结果(去掉break语句)
任务实施
通过储备知识的学习,可以知道任务2.2有多种可以解决的办法。
用if-else语句实现的代码如下所示。


用嵌套if语句实现的代码如下所示。

用if-else-if语句实现的代码如下所示。

任务演练
【任务描述】
减肥计划,即输入一个1~7的数字,显示对应的减肥活动。
周一:跑步
周二:游泳
周三:慢走
周四:动感单车
周五:拳击
周六:爬山
周日:好好吃一顿
【任务目的】
熟练运用各种选择语句解决简单问题,针对具体的问题挑选合适的选择语句。
【任务内容】
分析题目,判断使用switch语句来实现。编程思路如下所示。
● 输入一个数字,用一个变量接收。
● 对该数字进行判断,用switch语句实现。
● 在对应的语句控制中输出对应的减肥活动。
具体步骤如下。
1)启动Eclipse,创建Java项目,项目名称设为“项目实训2_2”。
2)创建类Test,在类体中定义变量sc用来接收输入的表示周几的数字,定义week变量用来保存该数字。
3)用switch-case语句判断,输出对应的减肥活动。
4)在代码页面上右击,在弹出的快捷菜单中选择“Run As”→“Java Application”命令,运行程序。