Java程序设计 第3章 控制语句
学习目标 掌握布尔数据类型、布尔表达式和布尔运算符 使用if、switch语句控制程序的执行 使用条件运算符 了解字符串格式化输出 了解操作数执行顺序、操作符优先级和结合方向
布尔数据类型 boolean类型表示真(true)或假(false)。 关系运算符: <, <=, >, >=, ==, != 关系运算符的计算结果是boolean类型 Boolean类型不能与其它数据类型混合运算 布尔运算符: !, &&, ||, ^, &, | & 真 假 | 真 假 ^ 真 假 Example:TestBoolean.java, LeapYear.java, AdditionTutor.java
条件语句 if语句 简单的if语句 if-else语句 if嵌套语句 switch语句 条件表达式
简单if语句 语法 if (bool-expression) statement or block 布尔表达式 false true 语句/语句块 if (radius >= 0) { area = radius * radius * PI; System.out.println("The area for the circle of radius " + radius + " is " + area); }
if-else语句 语法 if(bool-expression) statement or block 1 else 布尔表达式 false true 语句/语句块1 语句/语句块2 if (radius >= 0) { area = radius * radius * 3.14159; System.out.println("The area for the circle of radius " + radius + " is " + area); } else { System.out.println("Negative input"); }
嵌套if语句 if (score > 90.0) grade = ‘A’; else if (score >= 80.0) grade = ‘B’; if (scroe >= 70.0) grade = ‘C’; if (score >= 60.0) grade = ‘D’; grade = ‘F’; if (score > 90.0) grade = ‘A’; else if (score >= 80.0) grade = ‘B’; else if (scroe >= 70.0) grade = ‘C’; else if (score >= 60.0) grade = ‘D’; else grade = ‘F’; 等价于
注意 else语句与同一块中最近的if语句匹配 int i = 1, j = 2, k = 3; if (i > j) if(i > k) System.out.println(“A”); else System.out.println(“B”); 相当于
提示 尽量避免使用if语句将测试值赋值给布尔变量,应直接将测试值赋给变量。 if (number % 2 == 0) even = true; else even = false; 等价于 even = number % 2 == 0;
提示 避免在条件表达式中使用比较操作符判断布尔变量的真假。 if (even == true) System.out.println(“It is even.”); 等价于 if (even)
例 税款计算问题 美国的个人所得税根据纳税人情况和须纳税收入进行计算。编写程序,用户输入纳税人情况和须纳税收入,计算出2002年的所得税。 2002年美国个人所得税税率表 Example:ComputeTaxWithSelectionStatement.java
switch语句 语法 switch语句的判断条件只能是byte,short,char,int。 switch(expression) { case value1 : statement(s) break; case value2 : … default : } switch语句的判断条件只能是byte,short,char,int。 value1-valueN必须与判断条件类型相同,且为常量表达式,不能是变量。 case子句后面可以跟多条语句,这些语句可以不用大括号括起来。 程序将从第一个匹配的case子句处开始执行后面的所有代码(包括后面case子句中的代码)。可以使用break语句跳出switch语句。 default语句是可选的。当所有case子句条件都不满足时执行。 Example:TestSwitch.java
条件表达式 语法 bool-expression ? expression1 : expression 2 例如:求num1和num2的最大值 max = (num1 > num2) ? num1 : num2;
格式化输出 JDK1.5提供了格式化控制台输出方法 格式化字符串 格式描述符 System.out.printf(format, item1, item2, …); 格式化字符串 String.format(format, item1, item2, …); 格式描述符 %b 布尔值 %c 字符 %d 十进制整数 %f 浮点数 %e 科学计数法 %s 字符串 Example:TestPrintf.java
操作符优先级和结合性 括号优先级最高,如果括号有嵌套,内部括号优先执行。 如果没有括号,则根据操作符的优先级和结合规则确定执行顺序。 如果相邻的操作符有相同的优先级,则根据结合规则确定执行顺序。 除赋值运算符之外的二元运算符都是左结合的。 赋值运算符和?:运算符是右结合的。 例如: a+b-c+d 等价于 ((a+b)-c)+d a=b+=c=5 等价于 a=(b+=(c=5))
运算符优先级 后缀运算符 [] . (params) expr++ expr— 前缀运算符 ++expr --expr +expr –expr ! 创建或类型转换 new (type)expr 乘除 * / % 加减 + - 移位 << >> >>> 关系 < > >= <= instanceof 等价 == != 与 & 异或 ^ 或 | 条件与 && 条件或 || 条件 ?: 赋值 = += -= *= /= %= >>= <<= >>>= &= ^= |=
操作数的运算次序 操作符的优先级和结合规则只规定了操作符的执行顺序。操作数从左至右进行运算。 二元操作符左边的操作数比右边的操作数优先运算。例如: int a = 0; int x = a + (++a); x的结果为1 int x = (++a) + a; x的结果为2
表达式规则 3 + 4 * 4 > 5 * (4 + 3) - 1 的执行顺序为: 规则 可能的情况下,从左向右计算所有子表达式 根据运算符的优先级进行运算 优先级相同的运算符,根据结合方向进行运算 3 + 4 * 4 > 5 * (4 + 3) - 1 的执行顺序为: 3 + 4 * 4 > 5 * (4 + 3) - 1 3 + 4 * 4 > 5 * 7 – 1 3 + 16 > 5 * 7 – 1 3 + 16 > 35 – 1 19 > 35 – 1 19 > 34 false