IF语句使用
一个if语句由一个后跟一到多个语句的布尔表达式组成,其语法形式如下:
| if(布尔表达式) { //如果布尔表达式为true,就执行的语句 } |
如果圆括号中的布尔表达式为true,就执行大括号中的语句。如果布尔表达式为false,那么就跳过大括号中的语句。在布尔表达式为false的情况下,控制流程将跳转到大括号之下的语句。
如下if使用示例
/* IfDemo.java if语句的使用演示。 */ public class IfDemo { public static void main(String [] args) { int x = Integer.parseInt(args[0]); double half = 0.0; if(x != 0) { half = x / 2.0; System.out.println(x + "/2 = " + half); } if(x == 0) { System.out.println("x的值等于0"); } int y = x * 5; char grade = 'F'; if(y >= 85) { grade = 'A'; } if(y >= 70 && y < 85) grade = 'C'; System.out.println("y = " + y + " , 成绩 = " + grade); } } |
System.out.println("x的值等于0");
}
int y = x * 5;
char grade = 'F';
if(y >= 85) {
grade = 'A';
}
if(y >= 70 && y < 85) grade = 'C';
System.out.println("y = " + y + " , 成绩 = " + grade);
}
}
释义:在IfDemo程序中,有一段整数除以一半的代码。如果我们用x/2,因为2是一个整数字面量,被看作为int类型,那么x/2的结果就是个int类型的,这意味着余数会被丢弃。例如,19/2结果是9,而不是9.5。通过使用语句“x/2.0”,我们就可以强制x在除法计算发生前就被提升为double类型,因而不会丢失余数。例如,19/2.0结果就是9.5。
如果if语句后只有一条语句,那么if语句的大括号可以不要。例如,在前面的IfDemo程序中,下面的if语句就不需要大括号,因为该语句后面只有一条语句:
| if(y >= 70 && y < 85) grade = 'C'; |
在比较(y>=85)的if语句中,我们用了大括号,但是这不是必须的。
一个if语句后可以跟上一个可选的else语句,用于在布尔表达式为false时执行。if/else语句的语法形式如下:
| if(布尔表达式) { //当布尔表达式为true时执行 } else { //当布尔表达式为false时执行 } |
通过使用if/else语句,我们可以根据布尔表达式的值,确保要么是if块要么是else块被执行。
else块也可以包含另一个if语句,这样就创建了一系列if/else语句,但是只有一个if代码块被执行。语法形式类似如下格式:
| if(布尔表达式) { } else if(布尔表达式) { } else if(布尔表达式) { } //等等,直到 else { }
|
当使用如上格式的if/else语句时,最后的else块是可选的。代码清单3.2所示的StudentGrade程序演示了if/else控制结构的用法,在程序中对0-100之间的学生考试分数指定一个字母等级。演示该程序,并判断各种不同的考试分数的输出。
| /* StudentGrade.java if/else语句的使用演示。 */
public class StudentGrade { public static void main(String [] args) { int score = Integer.parseInt(args[0]); char grade; if(score >= 90) { grade = 'A'; System.out.println("好样的!"); } else if(score >= 80) { grade = 'B'; System.out.println("不错"); } else if(score >= 70 && score < 80) { grade = 'C'; } else if(score >= 60) { grade = 'D'; } else { grade = 'F'; System.out.println("继续努力"); } System.out.println("你的成绩等级为:" + grade); } } |
在StudentGrade程序中,只有一个if/else块会被执行。注意,假如考试分数为92,那么所有的if语句都是true。但是,因为按顺序检测的,(x>=90)块先被检测为真,于是成绩等级被指定为'A',输出消息“好样的!”,控制流程随后跳出if/else结构,执行的下一条语句是显示“你的成绩等级为:A”的println()语句,而后续的布尔表达式都不会被检测。
switch语句
switch语句允许变量与多个值进行相等性检测,每个值被一个case语句语句调用和检测。一个switch语句的语法一般是如下形式:
| switch(变量){ case 值 : //语句 break; //optional case 值 : //语句 break; //可选 //可以有很多case语句 default : //可选 //语句 } |
如下的规则适用于switch语句:
- switch语句中检测的变量只能是32位或更小的整数值,也就是说只能是byte、short、int和char类型(注:JDK7.0以后,变量可以是String类型)。
- 在一个switch语句中可以有很多case语句。每个case后跟一个用于比较的值和一个冒号。
- case后的值必须是与switch中的变量相同的数据类型,并且必须是常量或字面量。
- 当变量的值等于case后的值时,该case语句后的语句开始执行,直到遇到break语句。
- 当遇到break语句时,switch语句结束,控制流程跳转到该switch语句的下一行。
- 并不是所有case语句中需要包含一个break语句。如果没有break语句,控制流程继续执行到下一个case语句,直到遇到break语句。
- 一个switch语句可以有一个可选的default条件,一般出现在switch语句的末尾。如果所有case条件都是false,那么default条件可以用于执行某种任务。在default条件中不需要break语句。
通过一个示例来理解switch语句更为简单。代码清单3.3所示的CongratulateStudent程序用一个switch语句,根据学生的成绩等级,输出一条消息。main()方法中的第一条语句获取第一个命令行参数做为成绩等级。研究程序,判断各种成绩等级的输出结果。
| /* CongratulateStudent.java switch语句的使用演示。 */
public class CongratulateStudent { public static void main(String[] args) { char grade = args[0].charAt(0); switch (grade) { case 'A': System.out.println("优秀!"); break; case 'B': case 'C': System.out.println("不错"); break; case 'D': System.out.println("通过"); case 'F': System.out.println("要继续努力"); break; default: System.out.println("无效的成绩"); } System.out.println("你的成绩等级是: " + grade); } } |
注意,当成绩等级为A时,第一条case语句为true。输出字符串“优秀!”,然后遇到break语句,控制流程跳到switch语句后的下一条语句。当成绩等级为B时,第二条case语句为true,case B后的所有语句都会被执行,直到遇到break语句。当成绩等级为B时,即使“case 'C'”为false,控制流程继续往下走,因为B和C之间没有break语句。当成绩等级为D时,控制流程类似。
Switch语句从C继承而来,在很多情况下它比使用多个if/else语句更优美更容易。但是必须注意的是,switch语句只测试变量和值的相等性,不能用于大于、小于比较。此外,在单个case语句中只能比较一个值。