在实际生活中经常需要做出一些判断,比如开车来到一个十字路口,就需要对红绿灯进行判断,如果前面是红灯,就停车等候,如果是绿灯,就通行。Java中有一种特殊的语句叫做选择语句,它也需要对一些条件做出判断,从而决定执行哪一段代码。选择语句分为if条件语句和switch条件语句。
if语句是指如果满足某种条件,就进行某种处理。例如,小明妈妈跟小明说“如果你考试得了100分,星期天就带你去游乐场玩”。这句话可以通过下面的一段伪代码来描述。
如果小明考试得了100分
妈妈星期天带小明去游乐场
在上面的伪代码中,“如果”相当于Java中的关键字if,“小明考试得了100分”是判断条件,需要用()括起来,“妈妈星期天带小明去游乐场”是执行语句,需要放在{}中。修改后的伪代码如下:
if (小明考试得了100分) {
妈妈星期天带小明去游乐场
}
通过上面的伪代码可以总结出if语句的格式:
if (条件语句){
代码块
}
流程图如下:
接下来通过一个案例学习if语句的具体用法。
public class Example07 {
public static void main(String[] args) {
int x = 5;
if (x < 10) {
x++;
}
System.out.println("x=" + x);
}
}
if…else语句是指如果满足某种条件,就进行某种处理,否则就进行另一种处理。例如,要判断一个正整数的奇偶,如果该数字能被2整除则是一个偶数,否则该数字就是一个奇数。
if…else语句具体语法格式如下: if (判断条件){ 执行语句1 ... } else{ 执行语句2 ... }
流程图如下:
接下来通过一个案例实现判断奇偶数的程序。
public class Example08 {
public static void main(String[] args) {
int num = 19;
if (num % 2 == 0) {
// 判断条件成立,num被2整除
System.out.println("num是一个偶数");
} else {
System.out.println("num是一个奇数");
}
}
}
if…else if…else语句用于对多个条件进行判断,进行多种不同的处理。例如,对一个学生的考试成绩进行等级划分,如果分数大于80分,则等级为优;如果分数大于70分,则等级为良;如果分数大于60分,则等级为中;如果分数小于60分,则等级为差。
if…else if…else语句格式:
if (判断条件1) {
执行语句1
}
else if (判断条件2) {
执行语句2
}
...
else if (判断条件n) {
执行语句n
}
else {
执行语句n+1
}
流程图如下:
接下来通过一个案例演示if…else if…else语句的用法,该案例实现对学生考试成绩进行等级划分的程序。
public class Example09 {
public static void main(String[] args) {
int grade = 75; // 定义学生成绩
if (grade > 80) {
// 满足条件 grade > 80
System.out.println("该成绩的等级为优");
} else if (grade > 70) {
// 不满足条件 grade > 80 ,但满足条件 grade > 70
System.out.println("该成绩的等级为良");
} else if (grade > 60) {
// 不满足条件 grade > 70 ,但满足条件 grade > 60
System.out.println("该成绩的等级为中");
} else {
// 不满足条件 grade > 60
System.out.println("该成绩的等级为差");
}
}
}
Java提供了一个三元运算符,可以同时操作三个表达式。三元运算符语法格式如下所示:
判断条件 ? 表达式1 : 表达式2
在上述语法格式中,当判断条件成立时,计算表达式1的值作为整个表达式的结果,否则计算表达式2的值作为整个表达式的结果。
使用三元运算符时需要注意以下几点:
(1)条件运算符“?”和“:”是一对运算符,不能分开单独使用。
(2)条件运算符的优先级低于关系运算符与算术运算符,但高于赋值运算符。
(3)条件运算符可以进行嵌套,结合方向自右向左。例如,a>b?a:c>d?c:d应该理解为a>b?a:(c>d?c:d),这也是条件运算符的嵌套情形,即三元表达式中的表达式2又是一个三元表达式。
switch 条件语句也是一种很常用的选择语句,和if条件语句不同,它只能针对某个表达式的值做出判断,从而决定程序执行哪一段代码。例如,在程序中使用数字1~7表示星期一到星期天,如果想根据输入的数字输出对应中文格式的星期值,可以通过下面的一段伪代码来描述:
用于表示星期的数字
如果等于1,则输出星期一
如果等于2,则输出星期二
如果等于3,则输出星期三
如果等于4,则输出星期四
如果等于5,则输出星期五
如果等于6,则输出星期六
如果等于7,则输出星期天
上述伪代码,如果使用if…else语句实现,则代码太过繁琐,不便于阅读。为此,Java提供了switch语句实现这种需求,switch语句使用switch关键字描述一个表达式,使用case关键字描述和表达式结果比较的目标值,当表达式的值和某个目标值匹配时,就执行对应case下的语句。
switch (表达式){
case 目标值1:
执行语句1
break;
case 目标值2:
执行语句2
break;
......
case 目标值n:
执行语句n
break;
default:
执行语句n+1
break;
}
switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,则执行对应case后面的语句;如果没找到任何匹配的值,则执行default后的语句。switch语句中的break关键字将在后面的小节中做具体介绍,此处,初学者只需要知道break的作用是跳出switch语句即可。
接下来通过一个案例来演示switch语句的用法,在该案例中,使用switch语句根据给出的数值输出对应中文格式的星期。
public class Example10{
public static void main(String[] args) {
int week = 5;
switch (week) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期天");
break;
default:
System.out.println("输入的数字不正确...");
break;
}
}
}
在使用switch语句时,如果多个case条件后面的执行语句是一样的,则执行语句只需书写一次即可。例如,要判断一周中的某一天是否为工作日,同样使用数字1~7表示星期一到星期天,当输入的数字为1、2、3、4、5时就视为工作日,否则就视为休息日。
public class Example11 {
public static void main(String[] args) {
int week = 2;
switch (week) {
case 1:
case 2:
case 3:
case 4:
case 5:
// 当 week 满足值 1、2、3、4、5 中任意一个时,处理方式相同
System.out.println("今天是工作日");
break;
case 6:
case 7:
// 当 week 满足值 6、7 中任意一个时,处理方式相同
System.out.println("今天是休息日");
break;
}
}
}
注意:在JDK5之前,switch语句中的表达式只能是byte、short、char、int类型的值,如果传入其他类型的值,程序会报错。JDK5引入了新特性,enum枚举可以作为switch语句表达式的值;JDK7中也引入了新特性,switch语句可以接收一个String类型的值。