if条件语句是一个重要的编程语句,它用于告诉程序在某个条件成立的情况下执行某段程序。而在另一种情况下执行另外的语句。
使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“布尔表达式”,如果该表达式返回的结果为true,则执行其后的语句;若为false,则不执行if条件之后的语句。if条件语句可分为简单的if条件语句、if…else语句和if…else 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 运行结果
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。使用三元运算符的好处是可以使代码简洁,并且有一个返回值。
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,使用if…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 >
注意:if语句只执行条件为真的命令语句,其他语句都不会都执行。