### if 条件语句

if 条件语句是一个重要的编程语句，它用于告诉程序在某个条件成立的情况下执行某段程序。而在另一种情况下执行另外的语句。

使用 if 条件语句，可选择是否要执行紧跟在条件之后的那个语句。关键字 if 之后是作为条件的“布尔表达式”，如果该表达式返回的结果为 true，则执行其后的语句；若为 false，则不执行 if 条件之后的语句。if 条件语句可分为简单的 if 条件语句、if…else 语句和 if…else if 多分支语句。

#### 1．简单的 if 条件语句

简单的 if 条件语句是条件语句的一种形式，它针对某种条件做出相应的处理。通常表现为“如果满足某种条件，就进行某种处理”。例如，聪聪的妈妈对聪聪说“如果你这次考试得 100 分，星期天就带你去公园玩”。这句话通过伪代码描述的算法如下：

如果聪聪考试得 100 分

星期天带聪聪去公园玩

在伪代码描述的算法中，如果相当于 Java 中的 if 关键字，所以将上面算法中的“如果”转换成 if，并且将“聪聪考试得 100 分”用一对小括号括起来，再将“星期天带聪聪去公园玩”用一对大括号括起来就可以得出以下格式的代码：

if(聪聪考试得 100 分){

星期天带聪聪去公园玩

}

实际上，上面代码就是简单的 if 条件语句，其语法格式如下：

if(布尔表达式){

语句序列

}

布尔表达式：必要参数。表示它最后返回的结果必须是一个布尔值，它可以是一个单纯的布尔变量或常量，或者使用关系或布尔运算符的表达式。

语句序列：可选参数。可以是一条或多条语句，当表达式的值为 true 时执行这些语句。如语句序列中仅有一条语句，则可以省略条件语句中的大括号。

例 语句序列中只有一条语句。实例代码如下：

int a = 100;

if (a == 100)

System.out.print("a 的值是 100");

说明：虽然if和else语句后面的复合语句块只有一条语句，省略“{ }”并无语法错误，但为了增强程序的可读性最好不要省略。

如果条件语句后的语句序列省略时，则可以保留外面的大括号，也可以省略大括号。然后在末尾添加分号“;”，如下所示的两种情况都是正确的：

例 省略了 if 条件表达式中的语句序列，实例代码如下：

boolean a = false;

if (a)

;

boolean b = false;

if (b) {

}

简单的 if 条件语句的执行过程如图 1 所示。

图 1 if 条件语句的执行过程

例 在项目中创建类 Getif，在主方法中定义整型变量。使用条件语句来判断两个变量的大小来决定输出结果。

public class Getif { // 创建类

public static void main(String args[]) { // 主方法

int x = 45; // 声明 int 型变量 x，并赋给初值

int y = 12; // 声明 int 型变量 y，并赋给初值

if (x > y) { // 判断 x 是否大于 y

System.out.println("变量 x 大于变量 y"); // 如果条件成立，输出的信息

}

if (x < y) { // 判断 x 是否小于 y

System.out.println("变量 x 小于变量 y"); // 如果条件成立，输出的信息

}

}

}

运行结果如图 2 所示：

图 2 运行结果

#### 2．if…else 语句

if...else 条件语句是条件语句最常用的一种形式，它针对某种条件有选择地做出处理。通常表现为“如果满足某种条件，就进行某种处理，否则就进行另一种处理”。例如，要判断指定年的 2 月份的天数，通过伪代码描述的算法如下：

如果指定年为闰年

2 月份为 29 天

否则

2 月份为 28 天

在伪代码描述的算法中，如果相当于 Java 中的 if 关键字，否则相当于 else 关键字，所以将上面算法中的“如果”转换成 if，并且将“指定年为闰年”用一对小括号括起来，将“2 月份为 29 天”用一对大括号括起来，然后将“否则”转换成 else，将“2 月份为 28 天”用一对大括号括起来就可以得出以下格式的代码：

if(指定年为闰年){

2 月份为 29 天

}else{

2 月份为 28 天

}

实际上，上面代码就是 if...else 条件语句，其语法格式如下：

if(表达式){

若干语句

}else{

若干语句

}

if 后面（）内的表达式的值必须是 boolean 型的。如果表达式的值为 true，则执行紧跟 if 语句的复合语句；如果表达式的值为 false，则执行 else 后面的复合语句。if…else 语句的执行过程如果 3 所示：

图 3 if…else 语句的执行过程

同简单的 if 条件语句一样，如果 if…else 语句的语句序列中只有一条语句（不包括注释），则可以省略该语句序列外面的大括号。有时为了编程的需要，else 或 if 后面的大括号里可以没有语句。

例 在项目中创建类 Getifelse，在主方法中定义变量，并通过使用 if…else 语句判断变量的值来决定输出结果。

public class Getifelse {

public static void main(String args[]) { //主方法

int math = 95; //声明 int 型局部变量，并赋给初值 95

int english = 56; //声明 int 型局部变量，并赋给初值 56

if (math > 60) { //使用 if 语句判断 math 是否大于 60

System.out.println("数学及格了"); //条件成立时输出信息

} else {

System.out.println("数序没有及格"); //条件不成立输出的信息

}

if (english > 60) { //判断英语成绩是否大于 60

System.out.println("英语及格了"); //条件成立输出的信息

} else {

System.out.println("英语没有及格"); //条件不成立输出的信息

}

}

}

运行结果如图 4 所示

图 4 运行结果

技巧：对于if…else语句可以使用三元运算符对语句进行简化。如下面代码：

if(a > 0)

b = a;

else

b = -a;

可以简写成：

b = a > 0?a:-a;

上段代码为求绝对值的语句，如果 a > 0，就把 a 的值赋值给变量 b，否则将-a 赋值给变量 b。也就是问号“？”前面的表达式为真，则将问号与冒号之间的表达式的计算结果赋值给变量 b，否则将冒号后面的表达式的计算结果赋值给变量 b。使用三元运算符的好处是可以使代码简洁，并且有一个返回值。

#### 3．if…else if 多分支语句

if...else if 多分支语句用于针对某一事件的多种情况进行处理。通常表现为“如果满足某种条件，就进行某种处理，否则如果满足另一种条件才执行另一种处理”。例如，聪聪和妈妈要从公园回家，如果步行，则需要 30 分钟，否则如果乘公交车，则需要 10 分钟，否则乘计程车只需要 5 分钟。针对该事件通过伪代码描述的算法如下：

如果步行

需要 30 分钟

否则，如果乘公交车

需要 10 分钟

否则

乘计程车则只地要 5 分钟

上面的用伪代码描述的算法可以转换为以下 Java 代码：

if(步行){

需要 30 分钟

}else if(乘公交车){

需要 10 分钟

}else{

乘计程车则只需要 5 分钟

}

实际上，上面代码就是 if...else if 多分支语句，其语法格式如下：

if(条件表达式 1){

语句序列 1

}

else if(条件表达式 2){

语句序列 2

}

…

else if(表达式 n){

语句序列 n

}

条件表达式 1~条件表达式 n：必要参数。可以由多个表达式组成，但最后返回的结果一定要为 boolean 类型。

语句序列：可以是一条或多条语句，当条件表达式 1 的值为 true 时，执行语句序列 1，当条件表达式 2 的值为 true 时，执行语句序列 2，依次类推。当省略任意一组语句序列时，可以保留其外面的大括号，也可以将大括号替换为分号“;”。if…else if 多分支语句的执行过程如图 5 所示：

图 5 if…else if 多分支语句流程图

例 在项目中创建类 GetTerm，在主方法中定义变量 x，使用 i f…else if 多分支语句通过判断 x 的值决定输出结果。

public class GetTerm { // 创建主类

public static void main(String args[]) { // 主方法

int x = 20; // 声明 int 型局部变量

if (x > 30) { // 判断变量 x 是否大于 30

System.out.println("a 的值大于 30"); // 条件成立的输出信息

} else if (x > 10) { // 判断变量 x 是否大于 10

System.out.println("a 的值大于 10，但小于 30"); // 条件成立的输出信息

} else if (x > 0) { // 判断变量 x 是否大于 0

System.out.println("a 的值大于 0，但小于 10"); // 条件成立的输出信息;

} else { // 当以上条件都不成立时，执行的语句块

System.out.println("a 的值小于 0"); // 输出信息

}

}

}

运行结果如图 6 所示。

图 6 实例运行结果

在本实例中由于变量 x 为 20，条件“x > 30”为假，程序向下执行判断下面的条件；条件“x > 10”为真，所以执行条件“x > 10”后面的程序块中语句。输出“a 的值大于 10，但小于 30”，之后退出 if 语句。

注意：if语句只执行条件为真的命令语句，其他语句都不会都执行。