3.2 条件语句

条件语句要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必须的)和条件为假时要执行的语句(可选的)。Java语言把任何非零和非空的值假定为true,把零或空的值假定为false。Java语言提供的条件语句如表3-1所示。

表3-1 条件语句

大多数编程语言中典型的条件结构形式如图3-2所示。

图3-2 条件结构形式

3.2.1 简单if语句

简单if语句仅有一个if语句,用来判断所给定的条件是否满足,根据判定结果(真或假)决定所要执行的操作。if语句的选择结构的一般语法格式如下:

参数介绍如下:

· 布尔表达式:必要参数,最后返回的结果必须是一个布尔值。它可以是一个单纯的布尔变量或常量,也可以是关系表达式。

· 语句:可以是一条或多条语句,当布尔表达式的值为true时执行这些语句,若仅有一条语句,则可以省略条件语句中的“{ }”。

如果布尔表达式为true,则if语句内的代码块将被执行;如果布尔表达式为false,将跳过语句块,执行花括号后面的语句。if语句的执行流程如图3-3所示。

图3-3 if语句执行流程

使用if语句应注意以下几点:

(1)if关键字后的一对圆括号不能省略。圆括号内的布尔表达式要求结果为布尔型或可以隐式转换为布尔型的表达式、变量或常量,即表达式返回的一定是布尔值true或false。

(2)if表达式后的一对花括号是语句块的语法。程序中的多个语句使用一对花括号将其括住,就构成了语句块。if语句中的语句块如果是一句,花括号可以省略;如果是一句以上,花括号一定不能省略。

(3)if语句表达式后一定不要加分号,如果加上分号代表条件成立后执行空语句,在调试程序时不会报错,只会警告。

【例3.1】编写程序,输入3个整数,把这3个数由大到小排序,并将结果输出(源代码\ch03\3.1.txt)。

图3-4 从大到小排列数据运行结果

运行结果如图3-4所示。

3.2.2 if…else语句

if…else语句是条件语句中最常用的一种形式,它会针对某种条件有选择地做出处理。通常表现为“如果满足某种条件,就进行某种处理,否则就进行另一种处理”,它是一个二分支选择结构,语法格式如下:

     if(布尔表达式)
     { 语句块1; }
     else
     { 语句块2;}

if…else的功能是先判断表达式的值,如果为真,执行语句块1,否则执行语句块2。if…else语句的执行流程如图3-5所示。

图3-5 ifelse语句执行流程

【例3.2】编写程序,输入一个整数,判断该整数的奇偶性,并输出判断结果(源代码\ch03\3.2.txt)。

保存并运行程序,如果输入偶数,运行结果如图3-6所示;如果输入奇数,运行结果如图3-7所示。

图3-6 输入偶数运行结果

图3-7 输入奇数运行结果

☆大牛提醒☆

当布尔表达式是一个布尔值的等值判断时,就是使用“==”判断布尔值,如果误写成赋值符号“=”,程序不会出错,能执行,但是判断结果有可能有误。

3.2.3 if…else if多分支语句

在Java语言中,if…else if多分支语句用于处理某一事件的多种情况,通常表现为“如果满足某一条件,就采用与该条件对应的处理方式;如果满足另一个条件,就采用与另一个条件对应的处理方式”,语法格式如下:

该流程控制语句的功能是首先执行表达式1,如果返回值为true,则执行语句块1,再判断表达式2,如果返回值为true,则执行语句块2,再判断表达式3,如果返回值为true,则执行语句块3……否则执行语句块n。if…else if多分支语句执行流程如图3-8所示。

图3-8 ifelse if多分支语句执行流程

【例3.3】根据录入的员工销售金额,输出相应的等级划分。90万元以上为业绩优秀,80万~90万元为业绩良好,70万~80万元为业绩中等,60万~70万元为业绩完成,60万元以下为业绩未完成。编写程序,使用if…else if多分支语句对销售金额进行判断,并输出相应的业绩评比结果(源代码\ch03\3.3.txt)。

图3-9 根据销售金额返回销售等级运行结果

运行结果如图3-9所示,这里输入销售金额为85万元,则返回的结果为业绩良好。

3.2.4 switch多分支语句

一个switch语句允许测试一个变量等于多个值时的情况。每个值称为一个case,且被测试的变量会对每个switch case进行检查。一个switch语句相当于一个if…else嵌套语句,因此它们相似度很高,几乎所有的switch语句都能用if…else嵌套语句表示。

switch语句与if…else嵌套语句最大的区别在于:if…else嵌套语句中的条件表达式是一个逻辑表达的值,即结果为true或false,而switch语句后的表达式值为整型、字符型或字符串型并与case标签里的值进行比较。

switch语句的语法格式如下:

图3-10 switch语句的判断流程

switch语句的判断流程如图3-10所示。

首先计算表达式的值,当表达式的值等于常量表达式1的值时,执行语句块1;当表达式的值等于常量表达式2的值时,执行语句块2;……;当表达式的值等于常量表达式n的值时,执行语句块n,否则执行default后面的语句块n+1,当执行到break语句时跳出switch结构。

switch语句必须遵循下面的规则:

(1)switch语句中的表达式是一个常量表达式,必须是一个整型或枚举类型。

(2)在一个switch中可以有任意数量的case语句,每个case后跟一个要比较的值和一个冒号。

(3)case标签后的表达式必须与switch中的变量具有相同的数据类型,且必须是一个常量或字面量。

(4)当被测试的变量等于case中的常量时,case后跟的语句将被执行,直到遇到break语句为止。

(5)当遇到break语句时,switch终止,控制流将跳转到switch语句后的下一行。

(6)不是每一个case都需要包含break。如果case语句不包含break,控制流将会继续后续的case,直到遇到break为止。

(7)一个switch语句可以有一个可选的默认值,出现在switch的结尾。默认值可用于在上面所有case都不为真时执行一个任务。默认值中的break语句不是必需的。

【例3.4】编写程序,使用switch语句根据学号查询学生信息(源代码\ch03\3.4.txt)。

运行结果如图3-11所示。其中学号2005输出三个人名,这是因为case 2005没有break语句,所以寻找下面的break,到case 2007执行语句后break才停止。而学号2008输出对应人名,还输出default的内容,只是因为case 2008之后没找到break,一直到default才停止的。学号2011,在系统中没有该学号,也就是没有满足的case常量与之对应,所以输出default内容。

图3-11 根据学号查询学生信息运行结果

图3-12 循环结构形式