资源描述
1语言程序设计第三章 控制语句西安电子科技大学 通信工程学院 2 第三章 控制语句n 学习目标l 声 明 布 尔 类 型 和 书 写 布 尔 表 达 式l 区 分 条 件 和 非 条 件 的 比 较 运 算 符 含 义小 于大 于 =大 于 等 于=等 于!=不 等 于 注 :1、 相 等 的 比 较 运 算 符 是 两 个 等 号 ( =)2、 字 符 也 可 以 进 行 比 较 。 实 际 上 是 对 字 符 的 Unicode进 行 比 较 。 如 : (a A) = true 5 n Boolean运算符l 又 称 为 逻 辑 运 算 符 ( Logical O perator)l 对 boolean值 运 算 , 得 到 新 的 boolean值Boolean运 算 符 名 称 含 义!非 (NOT) 取 反 。true false, false truepublic class LeapYearVerifier /* Main method */ public static void main(String args) / 用 户 输 入 年 份 String yearString = JOptionPane.showInputDialog(Enter a year); int year = Integer.parseInt(yearString); / 是 否 为 闰 年 boolean isLeapYear = ( (year % 4 = 0) / 显 示 String display = Year + year + isLeapYear = + isLeapYear; JOptionPane.showMessageDialog(null, display); 11 例:简单的数学学习工具n 程 序 随 机 产 生 两 个 一 位 整 数 number1和 number2, 显 示 给 学 生 如“ What is 7 + 9 ?”, 学 生 在 输 入 对 话 框 中 敲 入 答 案 之 后 , 程 序 显 示一 个 消 息 对 话 框 , 判 定 答 案 是 true还 是 false。import javax.swing.JOptionPane;public class AdditionTest /* Main method */public static void main(String args) / 产 生 两 个 随 机 数 (int类 型 ) int n1 = (int) (System.currentTimeMillis() % 10); int n2 = (int) (System.currentTimeMillis() * 7 % 10); / 提 示 用 户 输 入 结 果 String answerString = JOptionPane.showInputDialog( What is + n1 + + + n2 + ?); int answer = Integer.parseInt(answerString); / 计 算 结 果 String result = n1 + + + n2 + = + answer + is + (n1 + n2 = answer); JOptionPane.showMessageDialog(null, result); 12 位运算符n 当操作整型数据时,可以使用位运算符(即:按位运算)l 二 进 制 级 别 的 运 算l 当 用 于 boolean运 算 时 , booleanexpressionstatement(s)true false if ( (i0) else if (score = 80.0) grade = B; else if (score = 70.0) grade = C; else if (score = 60.0) grade = D; else grade = F;if (score = 90.0) grade = A;else if (score = 80.0) grade = B;else if (score = 70.0) grade = C;else if (score = 60.0) grade = D;else grade = F;等 效 于 建 议 采 用 这 种 书 写 风 格 : 避 免 了 深 层 缩 进 ; 程 序 可 读 性 好 23 n 跟踪这个程序:if (score = 90.0) grade = A;else if (score = 80.0) grade = B;else if (score = 70.0) grade = C;else if (score = 60.0) grade = D;else grade = F;假 设 score = 72.0 比 较 结 果 为 false 24if (score = 90.0) grade = A;else if (score = 80.0) grade = B;else if (score = 70.0) grade = C;else if (score = 60.0) grade = D;else grade = F; n 跟踪这个程序:假 设 score = 72.0 比 较 结 果 为 false 25if (score = 90.0) grade = A;else if (score = 80.0) grade = B;else if (score = 70.0) grade = C;else if (score = 60.0) grade = D;else grade = F; n 跟踪这个程序:假 设 score = 72.0 比 较 结 果 为 true 26if (score = 90.0) grade = A;else if (score = 80.0) grade = B;else if (score = 70.0) grade = C;else if (score = 60.0) grade = D;else grade = F; n 跟踪这个程序:假 设 score = 72.0 grade = C 27if (score = 90.0) grade = A;else if (score = 80.0) grade = B;else if (score = 70.0) grade = C;else if (score = 60.0) grade = D;else grade = F;Next statement n 跟踪这个程序:假 设 score = 72.0 退 出 if 语 句 28 n else 和 if 的匹配l else子 句 与 同 一 块 中 离 得 最 近 的 if子 句 相 匹 配int i = 1;int j = 2;int k = 3;if (i j) if (i k) System.out.println(A);else System.out.println(B);int i = 1;int j = 2;int k = 3;if (i j) if (i k) System.out.println(A); else System.out.println(B);等 效 于 29 如 果 想 让 else同 第 一 个 if匹 配 ,则 需 要 使 用 花 括 号 :推 荐 写 法 :int i = 1;int j = 2;int k = 3;if (i j) if (i k) System.out.println(A);else System.out.println(B);int i = 1;int j = 2;int k = 3;if (i j) if (i k) System.out.println(A); else System.out.println(B); 30 n 提示1:n 提示2:if (number % 2 = 0) even = true;else even = false;等 效 于boolean even = (number % 2 = 0);if (even = true) System.out.println(.); 等 效 于if (even) System.out.println(.);建 议 使 用 这 种 形 式因 为 如 果 不 小 心 写 为 :if (even = true) System.out.println(.);将 很 难 被 发 现 。 31 举例:个人所得税计算n 个人所得税计算方法(2011.9.1版):l 起 征 点 : 3500元l 收 入 -起 征 点 , 差 值 部 分 : 1、 不 超 过 1500元 的 部 分 , 税 率 3% 2、 超 过 1500元 至 4500元 的 部 分 , 税 率 10% 3、 超 过 4500元 至 9000元 的 部 分 , 税 率 20% 4、 超 过 9000元 至 35000元 的 部 分 , 税 率 25% 5、 超 过 35000元 至 55000元 的 部 分 , 税 率 30% 6、 超 过 55000元 至 80000元 的 部 分 , 税 率 35% 7、 超 过 80000元 的 部 分 , 税 率 45%n 如某人的收入为10000元,需要缴纳的个人所得税为:l 10000 - 3500 = 6500 l 1500 * 3% + (4500 - 1500) * 10% + (6500 - 4500) * 20%= 45 + 300 + 400 = 745 元 32 n 简便算法:l delta = 月 收 入 - 起 征 点 , 如 果 在 :l0 1500: delta * 3%l1500 4500: delta * 10% - 105l4500 9000: delta * 20% - 555l9000 35000: delta * 25% - 1005l35000 55000: delta * 30% - 2755l55000 80000: delta * 35% - 5505l 80000: delta * 45% - 13505 33 import javax.swing.JOptionPane;public class PersonalTaxCalculator public static void main(String args) String salaryString = JOptionPane.showInputDialog( 请 输 入 月 薪 ( 个 税 起 征 点 :3500)); double salary = Double.parseDouble(salaryString); double delta = salary - 3500; double tax = 0; if (delta 0 else tax = delta * 0.45 - 13505; / 取 小 数 点 后2位 , 并 输 出 tax = (int)(tax + 0.005) * 100) / 100.0; JOptionPane.showMessageDialog(null, Tax = + tax); 34 Switch 语句switch (switch-expression) case value1: statement(s)1; break; case value2: statement(s)2; break; . . case valueN: statement(s)N; break; default: default-statement(s);表 达 式 switch-expression必 须 能 计 算出 一 个 char、 byte、 short或 int型 值 ,并 且 必 须 用 括 号 括 住 它注 : long类 型 不 能 用 在 switch中value1, , valueN必 须 与switch-expression的 值 具 有 相 同的 数 据 类 型value1, , valueN都 是 常 量 表 达 式 , 也 就 是 说 在表 达 式 中 不 能 有 变 量 , 如 1+x是不 容 许 的当 switch-expression的 值 与 case语句 的 值 相 匹 配 时 , 将 从 该 case语句 开 始 执 行 , 直 到 遇 到 一 个break语 句 或 到 达 switch语 句 的 末 端 35 switch (switch-expression) case value1: statement(s)1; break; case value2: statement(s)2; break; . . case valueN: statement(s)N; break; default: default-statement(s);关 键 字 break是 可 选 的 。break语 句 可 以 立 即 终 止 整 个 switch语 句 。如 果 break语 句 没 有 出 现 , 那 么 执 行 下 一 条case 语 句默 认 情 况 ( default) 是 可 选 的 ,它 用 来 执 行 指 定 情 况 与 switch-expression都 不 匹 配 时 的 操 作 case语 句 是 顺 序 检 测 的 , 这 些 case的 顺 序 ( 包 括 默 认 情 况 )是 无 所 谓 的 。但 是 , 将 所 有 情 况 按 照 逻 辑 顺 序 排 列 并 把 默 认 情 况 放 在 最 后 是 良 好 的 编 程 风 格。 36 n 跟踪 switch 语句(没有 break)switch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch);假 设 ch = a 37switch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch); n 跟踪 switch 语句(没有 break)ch = a 38switch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch); n 跟踪 switch 语句(没有 break)执 行 这 一 行 : 输 出 a 39switch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch); n 跟踪 switch 语句(没有 break)执 行 这 一 行 : 输 出 a 40switch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch); n 跟踪 switch 语句(没有 break)执 行 这 一 行 : 输 出 a 41switch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch);Next statement n 跟踪 switch 语句(没有 break)执 行 下 一 条 语 句 42 n 跟踪 switch 语句(有 break)switch (ch) case a: System.out.println(ch); break; case b: System.out.println(ch); break; case c: System.out.println(ch); break;假 设 ch = a 43switch (ch) case a: System.out.println(ch); break; case b: System.out.println(ch); break; case c: System.out.println(ch); break; n 跟踪 switch 语句(有 break)ch = a 44switch (ch) case a: System.out.println(ch); break; case b: System.out.println(ch); break; case c: System.out.println(ch); break; n 跟踪 switch 语句(有 break)执 行 这 一 行 : 输 出 a 45switch (ch) case a: System.out.println(ch); break; case b: System.out.println(ch); break; case c: System.out.println(ch); break; n 跟踪 switch 语句(有 break)执 行 break, 跳 出 switch 46switch (ch) case a: System.out.println(ch); break; case b: System.out.println(ch); break; case c: System.out.println(ch); break;Next statement n 跟踪 switch 语句(有 break)执 行 下 一 条 语 句 47 条件运算符n 格式:n 例:(booleanExp) ? exp-for-true : exp-for-falsebooleanExp 为 true 时 执 行 booleanExp 为 false 时 执 行if (x 0) abs_x = -1 * x; else abs_x = x;等 效 于abs_x = (x0)?(-1*x):x;if (num % 2 = 0) System.out.println(num + is even);else System.out.println(num + is odd);等 效 于System.out.println( (num % 2 = 0)? num + is even : num + is odd); 48 n 条件运算符又称为“三元运算符”,也是Java中唯一的一个三元运算符l 一 元 运 算 符 : ! + -l 二 元 运 算 符 : + - * / % 49 运算符优先级运 算 符 含 义var+, var-后 置 自 增/自 减 运 算 符+var, -var, +var,-var !正/负 数 标 识 符前 置 自 增/自 减 运 算 符一 元 运 算 符*, /, %乘 、 除 、 求 余 运 算 符+, -加 减 运 算 符 移 位 运 算 符, , = instanceof关 系 运 算 符 =, !=相 等/不 等 比 较 运 算 符int x = a + (+a);int a = 0;int x = +a + a; 53 n 应用这些规则,表达式3+4*45*(4+3)-1的计算如下:3 + 4 * 4 5 * (4 + 3) - 13 + 16 5 * (4 + 3) - 119 5 * (4 + 3) - 119 5 * 7 - 119 35 - 119 34 false(1) 从 左 边 开 始 , 4*4 是 第 一 个 可 以 计 算 的 表 达 式(2) 接 下 来 计 算 3+16(3) 接 下 来 计 算 4+3(4) 接 下 来 计 算 5*7(5) 接 下 来 计 算 35-1(6) 比 较 运 算 1934(7) 得 到 最 终 结 果先 计 算 双 目 运 算 符 左 边 的 部 分 54 n 太复杂了!我根本记不住!n 除了以下一些专门考人的场合:l Java课 程 考 试l 找 工 作 时 , 面 试 /笔 试l 你 像 我 一 样 , 给 别 人 教 Javal 你 要 设 计 一 门 新 的 编 程 语 言 否则你永远都不要写 3+4*45*(4+3)-1 这样的表达式!n 怎么办?多用几个括号就搞定: (3 + 4 * 4) (5 * (4 + 3) - 1)
展开阅读全文