《第3章java选择语句-副本概要》由会员分享,可在线阅读,更多相关《第3章java选择语句-副本概要(76页珍藏版)》请在金锄头文库上搜索。
1、1,第三章 Java选择语句,学习目标 声明boolean类型以及使用比较运算符书写布尔表达式 实训一:编写程序AdditionQuiz 使用单向 if 语句实现选择控制 实训二:编写游戏程序GuessBirthday 使用双向 if 语句实现选择控制 使用嵌套 if 语句实现选择控制 避免 if 语句中的常见错误 实训三:编程的例子(SubstractionQuiz、BMI、ComputeTax) 使用Math.random()方法产生随机数 使用逻辑运算符( &、|、! )对条件进行组合 实训四:编程的例子(LeapYear、Lottery) 使用switch语句实现选择控制 使用条件运算
2、符书写表达式 检查控制运算符优先级和结合方向的规则 使用确认对话框 获取用户的确认信息,2,3.1 引言 在上一章中,如果我们给变量 radius(半径)赋一个负值, 那么程序就会输出一个非法的结果。在这种情况下,其实我们是不 希望程序再去计算面积的。那么该如何处理这种情况呢? Java提供了选择语句 以便在两个或更多可选择的流程中 做出选择。 例如,可以用下面的选择语句来处理上述问题: if ( radius 0 ) System.out.println(“非法的输入!“); else area = radius * radius * 3.1415926; System.out.printl
3、n( “面积是:“ + area ); 选择语句要用到条件。 条件就是布尔表达式(比如上面的 “radius0”)。 本章首先要介绍布尔类型、布尔值、布尔比较运算符 和布尔表达式。,3,3.2 boolean数据类型 该如何比较两个值呢?例如,一个半径是大于0、等于0、还是 小于0? 如表3-1所示,Java提供了六种比较运算符(也叫做关系 运算符),用于两个值的比较。,4,注意 关系运算符不仅可以用于数值之间的比较,还可以用于字符之间的比较。这是因为在Java中,字符之间的比较其实就是它们编码之间的比较!所以,编码值较大的字符将大于编码值较小的字符。例如,a(97)大于A(65)、c(99)
4、大于a(97)。,5,比较运算符的运算结果是一个布尔值:true(真)或 false(假)。 例如,下面的代码将显示比较运算符的运算结果: System.out.println( 3 a ); / 输出true. 因为 A 的编码值是65,而 B 为66. System.out.println( A = 10 ); / 输出false. 具有布尔值的变量称为布尔变量。boolean是用于声明布尔型 变量的类型符。boolean型数据只有两个直接量:true 和 false (它们都是Java保留字)。,6,再比如,下面语句将布尔值赋值给布尔变量: 1)boolean lightsOn = tr
5、ue; 2)int radius = 1.25; boolean conditionOfRadius = radius 0;,警告 相等的比较运算符是两个等号“=”,而不是一个等号“=”,后者仅指赋值运算符!,7,3.3 实训:一个简单的数学学习工具 假如希望开发一个程序,让一年级学生练习加法。程序随机产 生两个一位整数,然后给学生显示“ 7 + 9 = ?”,学生输入答案后, 程序就会显示一个评语。如下运行所示:,产生随机数的方法有很多种。到目前为止,最简单、方便的 途径,是使用System.currentTimeMillis()来产生随机数。,8,下面我们先来设计一下这个程序的算法: (程
6、序请见下一页的程序清单3-1) 1)产生第一个随机数number1; 2)产生第二个随机数number2; 3)显示题目 number1 + number2 = ?,以提示学生输入答案; 4)读入键盘输入的answer值; 5)显示关系表达式 answer = number1 + number2 的值(true 或 false)。,9,/源程序清单3-1 AdditionQuiz.java import java.util.Scanner; public class AdditionQuiz public static void main(String args) /产生第一个随机数 int
7、number1 = (int)(System.currentTimeMillis()%10); /第二个随机数 int number2 = (int)(System.currentTimeMillis()*7%10); /显示题目 System.out.print( number1 + “+“ + number2 + “= ?“ ); /读入键盘输入的答案 Scanner input = new Scanner (System.in); int answer = input.nextInt(); /显示评语结果:true(表示正确)或者false(表示错误) System.out.printl
8、n( number1+“+“+number2+“=“+answer+“;“ + ( number1 + number2 = answer ) ); ,10,3.4 if 语句 假如希望上面那个程序最后输出的评语是“6+2=7,错误!”, 那你又该如何来实现这个细微的改变呢? 答案是:你只能使用 选择语句 if语句 ! 例如,我们使用if语句来改写前面那个程序:, /显示评语结果:“正确!” 或者 “错误!” if ( number1 + number2 = answer ) System.out.println( number1 + “+“ + number2 + “=“ + answer +
9、 “; 正确!“ ) ; if ( number1 + number2 != answer ) System.out.println( number1 + “+“ + number2 + “=“ + answer + “; 错误!“ ) ;,11,下面就来介绍相关的技术。Java有几种类型的选择语句: 单向if语句、双向if语句、嵌套if语句、switch语句和条件表达式。 单向if语句 单向 if 语句的语法格式是: if ( 布尔表达式 ) 语句块 当且仅当布尔表达式为 true 时执行语句块。 单向 if 语句的执行流程如图3-1所示。,注意: 语句块中的每一条语句都必须以分号“;“结束
10、。,12,作为例子,看看使用if语句是如何解决radius为负数的情况: if ( radius = 0 ) area = radius * radius * 3.14159; System.out.println(“半径为“+radius+“的圆面积是:“ area ); 上述语句的执行流程参见图3-2。,13,可见,如果radius大于0,则计算圆面积并显示其结果; 否则,就不执行语句块内的这两条语句了。 布尔表达式必须用括号括住。下面代码是错误的: if i 0 System.out.println( “ i 是负数 “ ); 如果语句块内只有一条语句,则可以省略花括号。 if ( i
11、0 ) System.out.println( “ i 是负数 “ );,if ( i 0 ) System.out.println( “ i 是负数 “ ); ,14,在程序清单3-2中,提示用户输入一个整数。如果该整数是5的 倍数,则显示HiFive。如果该整数是2的倍数,则显示HiEven。,/源程序清单3-2 SimpleIfDemo.java import java.util.Scanner; public class SimpleIfDemo public static void main(String args) Scanner input = new Scanner (Syst
12、em.in); System.out.print( “请输入一个整数:“ ); int number = input.nextInt(); if ( number % 5 = 0 ) System.out.println( “HiFive“ ); if ( number % 2 = 0 ) System.out.println( “HiEven“ ); ,请输入一个整数:1,请输入一个整数:5 HiFive,请输入一个整数:2 HiEven,15,3.5 实例:猜生日 通过询问朋友5个问题,你就可以知道他出生在一个月的哪一 天了。每个问题都是在询问他的出生日是否在下面5个数字集合中。,你的生日
13、就是包含你生日那一天的那些集合的第一个数字之和。 例如,生日是19,那么,因为它出现在集合1、集合2和集合5中,而 这5个集合的第一个数字分别是1、2和16,所以,你的生日就是19。 下面的程序清单3-3给出了这个程序。它首先提示用户依次回答 该天是否在集合1中、在集合2中、在集合3中、在集合4中、在集合5 中?然后,如果回答在某个集合中,程序就将该集合的第一个数累 加到生日变量day中。,关于这个游戏的数学知识,留给大家课后讨论。,16,17,/源程序清单3-3 GuessBirthday.java import java.util.Scanner; public class GuessBi
14、rthday public static void main(String args) String set1 = “1 3 5 7n“ + “9 11 13 15n“ + “17 19 21 23n“ + “25 27 29 31“ ; String set2 = “2 3 6 7n“ + “10 11 14 15n“ + “18 19 22 23n“ + “26 27 30 31“ ; String set3 = “4 5 6 7n“ + “12 13 14 15n“ + “20 21 22 23n“ + “28 29 30 31“ ; String set4 = “8 9 10 11n“
15、 + “12 13 14 15n“ + “24 25 26 27n“ + “28 29 30 31“ ; String set5 = “16 17 18 19n“ + “20 21 22 23n“ + “24 25 26 27n“ + “28 29 30 31“ ; int day = 0; /生日的初始化为0 Scanner input = new Scanner (System.in);,18,/提示用户回答问题1 System.out.println( “你的生日在下面这个集合中吗?“ ); System.out.println( set1 ); /显示数字集合1 System.out.
16、print( “请输入 0(表示不在其中) 或 1(表示在其中):“ ); int answer = input.nextInt(); /读入用户回答1 if ( answer = 1 ) day += 1; /提示用户回答问题24 day += 2、4、8; /提示用户回答问题5 System.out.print( “你的生日在下面这个集合中吗?“ ); System.out.print( set5 ); /显示数字集合5 System.out.print( “请输入 0(表示不在其中) 或 1(表示在其中):“ ); answer = input.nextInt(); /读入用户回答5 if ( answer = 1 ) day += 16; System.out