《java概述课件-03-选择》由会员分享,可在线阅读,更多相关《java概述课件-03-选择(66页珍藏版)》请在金锄头文库上搜索。
1、java概述课件-03-选择java概述课件-03-选择2引言如果在前边程序中的radius赋一个负值,程序就会打印一个非法的结果。如果半径是一个负值,是不希望程序计算面积的,那么该如何计算这种情况呢?4引言如果在前边程序中的radius赋一个负值,程序就会3学习目标F声明boolean类型以及使用比较运算符书写布尔表达式(3.2节)。F使用布尔表达式编写程序AdditionQuize(3.3节)。F使用单向if语句实现选择控制(3.4节)。F使用单向if语句编写游戏GuessBirthday的程序(3.5节)。F使用双向if语句实现选择控制(3.6节)。F使用嵌套的if语句实现选择控制(3.
2、7节)。F避免if语句中的常见错误(3.8节)。F使用选择语句编程的不同种类的例子(SubstractionQuiz,BMI,ComputeTax)(3.9-3.11节)F使用Math.random()方法产生随机数(3.9节)。F使用逻辑运算符(&,|和!)对条件进行组合(3.12节)。F使用带组合条件的选择语句进行编程(LeapYear,Lottery)(3.13-3.14节)。F使用switch语句实现选择控制(3.15节)。F使用条件运算符书写表达式(3.16节)。F使用System.out.printf方法格式化输出(3.17节)。F检查控制运算符优先级和结合方向的规则(3.18节)
3、。F(GUI)使用确定对话框获取用户的确认信息(3.19节)。5学习目标声明boolean类型以及使用比较运算符书写布尔4boolean数据类型往往在一个程序中我们需要比较两个值,如i是否大于j。Java提供了六个比较运算符(也被称为关系操作符),可以用来比较两个值。比较的结果是一个布尔值:TRUE或FALSE。boolean b = (1 2);6boolean数据类型往往在一个程序中我们需要比较两个5比较运算符运算符 名称 小于大于=大于等于=等于!=不等于7比较运算符运算符 名称6问题:一个简单的数学学习工具AdditionQuizRun假设希望开发一个程序,让一年级学生练习加法。程序随
4、机产生两个一位整数:number1和number2,然后显示给学生“Whatis7+9?”,如实例运行所示。当学生在输入对话框中输入答案之后,程序显示一个消息,表明答案是真的还是假的。8问题:一个简单的数学学习工具AdditionQuizRun7单向if语句if(布尔表达式)语句;if(radius=0)area=radius*radius*PI;System.out.println(Thearea+forthecircleofradius+radius+is+area);9单向if语句if(布尔表达式)if(radius8注意10注意9问题:猜生日GuessBirthday该程序可以猜到你的
5、出生日期。运行看它是如何工作的。11问题:猜生日GuessBirthday该程序可以猜到10猜生日游戏的数学基础19的二进制是10011。7的二进制是111。23的二进制是11101。12猜生日游戏的数学基础19的二进制是10011。7的二进11简单if演示SimpleIfDemoRun程序提示用户输入一个整数,如果它能被5整除就显示HiFive,而如果它能被2整除就显示HiEven。13简单if演示SimpleIfDemoRun程序提示用12双向if语句if (布尔表达式) 布尔表达式为真时执行的语句(组);else 布尔表达式为假时执行的语句(组);14双向if语句if(布尔表达式)13i
6、f.else例子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);15if.else例子if(radius=0)14嵌套的if语句16嵌套的if语句15跟踪if-else语句if(score=90.0)grade=A;elseif(score=80.0)grade=B;elseif(score=70.0)gr
7、ade=C;elseif(score=60.0)grade=D;elsegrade=F;假如成绩是70.0这个语句是falseanimation17跟踪if-else语句if(score=90.016跟踪if-else语句if(score=90.0)grade=A;elseif(score=80.0)grade=B;elseif(score=70.0)grade=C;elseif(score=60.0)grade=D;elsegrade=F;假如成绩是70.0这个语句是falseanimation18跟踪if-else语句if(score=90.017跟踪if-else语句if(score=9
8、0.0)grade=A;elseif(score=80.0)grade=B;elseif(score=70.0)grade=C;elseif(score=60.0)grade=D;elsegrade=F;假如成绩是70.0这个语句是trueanimation19跟踪if-else语句if(score=90.018跟踪if-else语句if(score=90.0)grade=A;elseif(score=80.0)grade=B;elseif(score=70.0)grade=C;elseif(score=60.0)grade=D;elsegrade=F;假如成绩是70.0经判断是C级anima
9、tion20跟踪if-else语句if(score=90.019跟踪if-else语句if(score=90.0)grade=A;elseif(score=80.0)grade=B;elseif(score=70.0)grade=C;elseif(score=60.0)grade=D;elsegrade=F;假如成绩是70.0退出if语句animation21跟踪if-else语句if(score=90.020注意在同一块中,else总是和离它最近的if子句匹配。22注意在同一块中,else总是和离它最近的if子句匹配。21注意为了强制这个else匹配第一个if子句,必须添加一对花括号: in
10、t i = 1; int j = 2; int k = 3; if (i j) if (i k) System.out.println(A); else System.out.println(B);这条语句会打印B.23注意为了强制这个else匹配第一个if子句,必须添加一对22常见错误在if行出现错误的分号if(radius=0);area=radius*radius*PI;System.out.println(Theareaforthecircleofradius+radius+is+area);这个错误很难发现,因为它既不是编译错误也不是运行错误,而是一个逻辑错误。当使用下行块风格时,经
11、常会出现这个错误。所以使用行为块风格可以帮助防止出现此类错误。Wrong24常见错误在if行出现错误的分号Wrong23小窍门25小窍门24注意26注意25问题:一个改进的数学学习工具假设我们想开发一个一年级学生练习减法的程序。程序随机产生两个一位整数:number1和number2,且满足number1=number2.程序向学生显示问题,例如,“Whatis9-2?”。当学生输入答案之后,程序会显示一个消息表示答案是否正确。SubtractionQuiz27问题:一个改进的数学学习工具假设我们想开发一个一年级26问题:计算身体质量指数体质指数(BMI)是关于体重指标的健康测量。将以千克为单
12、位的体重除以以米为单位身高的平方,就得到BMI的值。针对16岁及以上的年龄人群,他们的BMI值的说明如下表所示。ComputeBMI28问题:计算身体质量指数体质指数(BMI)是关于体重指27问题:计算税款美国国家联邦个人收入所得税是基于纳税人登记的身份和可征税收入计算的。纳税人登记的身份有四种:单身纳税人,已婚共同纳税人,已婚单独纳税人和家庭户主纳税人。税率会随年变化。下表给出2009年的税率。Marginal Tax RateSingleMarried Filing Jointly or Qualified Widow(er)Married Filing SeparatelyHead of
13、 Household10%$0$8,350$0$16,700$0$8,350$0$11,95015%$8,351$33,950$16,701$67,900$8,351$33,950$11,951$45,50025%$33,951$82,250$67,901$137,050$33,951$68,525$45,501$117,45028%$82,251$171,550$137,051$208,850$68,525$104,425$117,451$190,20033%$171,551$372,950$208,851$372,950$104,426$186,475$190,201-$372,95035
14、%$372,951+$372,951+$186,476+$372,951+29问题:计算税款美国国家联邦个人收入所得税是基于纳税人28问题:计算税款续ComputeTaxif (status = 0) / Compute tax for single filerselse if (status = 1) / Compute tax for married file jointlyelse if (status = 2) / Compute tax for married file separatelyelse if (status = 3) / Compute tax for head of
15、householdelse / Display wrong status30问题:计算税款续ComputeTaxif(status29逻辑运算符运算符 名称!非&与|或异或31逻辑运算符运算符 名称30运算符!的真值表32运算符!的真值表31运算符&的真值表33运算符&的真值表32运算符|的真值表34运算符|的真值表33异或运算符的真值表35异或运算符的真值表34例子给出有一个程序检验一个数是否能被2和3整除,是被2还是3整除,是只能被2或3两者中的一个整除。TestBooleanOperatorsRun36例子给出有一个程序检验一个数是否能被2和3整除,是被35例子续System.out.p
16、rintln(Is+number+divisibleby2and3?+(number%2=0)&(number%3=0);System.out.println(Is+number+divisibleby2or3?+(number%2=0)|(number%3=0);System.out.println(Is+number+divisibleby2or3,butnotboth?+(number%2=0)(number%3=0);TestBooleanOperatorsRun37例子续System.out.println(Is36运算符&和|Java中&和&以及|和|的区别:&和&都是表示与,区别
17、是&只要不满足第一个条件,后面条件就不再判断。而&要对所有的条件都进行判断。|和|同理。38运算符&和|Java中&和&以及|和|的区别37运算符&和|如果x是1,在如下表达式之后x是?(x 1) & (x+ x) & ( 1 x+)这个又如何呢 (1 = x) | (10 x+)?(1 = x) | (10 x+)?39运算符&和|如果x是1,在如下表达式之后x是?38问题:判断闰年LeapYearRun这个程序首先让用户输入一个int型年份,然后判断它是不是闰年。如果某年可以被4整除而不能被100整除,或者可以被400整除,那么这一年就是闰年。(year%4=0&year%100!=0)|
18、(year%400=0)40问题:判断闰年LeapYearRun这个程序首先让用39问题:彩票假设我们想开发一个玩彩票的游戏,程序会随机地产生一个两位数的彩票,提示用户输入一个两位数,然后按照下面的规则判断用户是否能赢。LotteryF如果用户的输入数匹配彩票得实际顺序,奖金为$10000美元。F如果用户输入的所有数字匹配彩票的所有数字,奖金$3000美元。F如果用户输入的一个数字匹配彩票的一个数字,奖金$1000美元。41问题:彩票假设我们想开发一个玩彩票的游戏,程序会随机40switch语句switch(status)case0:computetaxesforsinglefilers;br
19、eak;case1:computetaxesformarriedfilejointly;break;case2:computetaxesformarriedfileseparately;break;case3:computetaxesforheadofhousehold;break;default:System.out.println(Errors:invalidstatus);System.exit(0);42switch语句switch(status)41switch语句的流程图43switch语句的流程图42switch语句的规则switch(switch-expression)case
20、value1:statement(s)1;break;casevalue2:statement(s)2;break;casevalueN:statement(s)N;break;default:statement(s)-for-default;Switch表达式必须能计算出一个char,byte,short或int型值,并且必须总是用括号括住。value1,.,valueN必须与switch表达式的值具有相同的数据类型。注意:value1,.,valueN都是常量表达式,也就是说这里的表达式是不能包含变量的,例如,不允许出现1+x。44switch语句的规则switch(switch-e43S
21、witch语句的规则关键字break是可选的。break语句会立即终止整个switch语句。如果break语句是不存在的,下一个case语句将被执行。switch(switch-expression)casevalue1:statement(s)1;break;casevalue2:statement(s)2;break;casevalueN:statement(s)N;break;default:statement(s)-for-default;默认情况下(default)是可选的,用来指定没有一个指定的case与switch表达式匹配时应该采取的操作。这几条语句是按顺序判断的,但是他们的顺
22、序不影响程序运行结果.然而要有良好的编程风格,因此按顺序比较好。习惯上把默认情况放在最后。45Switch语句的规则关键字break是可选的。b44跟踪switch语句switch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch);如果ch是a:46跟踪switch语句switch(ch)如果ch45跟踪switch语句switch (ch) case a: System.out.println(ch); case b: System.out.p
23、rintln(ch); case c: System.out.println(ch);ch是a:47跟踪switch语句switch(ch)ch是46跟踪switch语句switch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch);执行这一行语句48跟踪switch语句switch(ch)执行这一行47跟踪switch语句switch (ch) case a: System.out.println(ch); case b: System.out
24、.println(ch); case c: System.out.println(ch);执行这一行语句49跟踪switch语句switch(ch)执行这一行48跟踪switch语句switch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch);执行这一行语句50跟踪switch语句switch(ch)执行这一行49跟踪switch语句switch (ch) case a: System.out.println(ch); case b: Syst
25、em.out.println(ch); case c: System.out.println(ch);Nextstatement;执行这一行语句51跟踪switch语句switch(ch)执行这一行50跟踪switch语句switch (ch) case a: System.out.println(ch); break; case b: System.out.println(ch); break; case c: System.out.println(ch);假如chisa:52跟踪switch语句switch(ch)假如ch51跟踪switch语句switch (ch) case a: Sy
26、stem.out.println(ch); break; case b: System.out.println(ch); break; case c: System.out.println(ch);Executethisline53跟踪switch语句switch(ch)Execu52跟踪switch语句switch (ch) case a: System.out.println(ch); break; case b: System.out.println(ch); break; case c: System.out.println(ch);ch是a:54跟踪switch语句switch(ch
27、)ch是53跟踪switch语句switch (ch) case a: System.out.println(ch); break; case b: System.out.println(ch); break; case c: System.out.println(ch);执行这一行语句55跟踪switch语句switch(ch)执行这一行54跟踪switch语句switch (ch) case a: System.out.println(ch); break; case b: System.out.println(ch); break; case c: System.out.println(
28、ch);Nextstatement;执行下一行语句56跟踪switch语句switch(ch)执行下一行55条件表达式条件表达式if(x0)y=1elsey=-1;等同于:y=(x0)?1:-1;(boolean-expression)?expression1:expression2三目运算符二元运算符一元运算符57条件表达式if(x0)56条件运算符if (num % 2 = 0) System.out.println(num + “is even”);else System.out.println(num + “is odd”);System.out.println( (num % 2 =
29、 0)? num + “is even” : num + “is odd”);58条件运算符if(num%2=0)57条件运算符(boolean-expression) ? exp1 : exp259条件运算符(boolean-expression)?58格式化控制台输出使用printf语句:System.out.printf(format,items);格式标识符指定每个条目应该如何显示。这里的条目可以是数值,字符,布尔值或字符串。一个标识符是以百分号(%)开头的转换码。60格式化控制台输出使用printf语句:59常用的标识符标识符标识符 输出输出 举例举例%b布尔值true or fal
30、se%c字符a%d十进制整数 200 %f浮点数 45.460000%e标准科学计数法形式的数4.556000e+01%s 字符串Java is cool61常用的标识符标识符输出60运算符的优先级表Fvar+, var-(后置运算符)F+,-(一元加号和一元减号), +var,-var(前置运算符)F(type) 类型转换F! (非)F*, /, % (乘法,除法和求余运算)F+, - (二元加法和减法)F, , = (比较运算符)F=, !=; (相等运算符) F (异或) F& (条件与)F| (条件或) F=, +=, -=, *=, /=, %= (赋值运算符)62运算符的优先级表v
31、ar+,var-(后置运算符)61运算符的优先级和结合方向 应该首先计算括号内中的表达式(括号可以嵌套,在嵌套的情况下,先计算里层括号中的表达式)。当计算没有括号时,运算符会依照优先级规则和结合规则进行运算。 优先级规则定义了运算符的先后次序,它包含目前所学的所有运算符。它们从上到下按优先级递减的方式排列。优先级相同的运算符在同一排。63运算符的优先级和结合方向应该首先计算括号内中的表达式62运算符的结合性 如果相邻运算符的优先级相同,则结合方向决定它们的执行顺序。除了赋值运算符之外,所有的二元运算符都是左结合ab+cd等价于(ab)+c)d赋值运算符是右结合,所以a=b+=c=5等价于a=(b+=(c=5)64运算符的结合性如果相邻运算符的优先级相同,则结合方向63例子应用运算符的优先级和结合性规则,表达式3+445(4+3)-1等于如下:65例子应用运算符的优先级和结合性规则,表达式64(GUI)确定对话框intoption=JOptionPane.showConfirmDialog(null,Continue);66(GUI)确定对话框intoption=JOpt65问题:猜生日GuessBirthDateUsingConfirmationDialog这个程序可以猜到你的生日,运行看看是如何工作的67问题:猜生日GuessBirthDateUsingCon感谢聆听