本章任务
命令实现幸运抽奖
实现会员信息录入
实现按会员优惠计划进行购物结算
实现会员折扣的计算
本章技能目标
命实现幸运抽奖
实现会员信息录入
实现按会员优惠计划进行购物结算
实现会员折扣的计算
本章简介
上一章我们学习了变量的概念和一些常用的数据类型,主要有int、double、char、String、boolean等。另外,还学习了一些运算符,包括算术运算符、赋值运算符及关系运算符。
本章将学习基本的选择结构。在前两章中,我们编写的程序总是从程序入口开始,顺序执行每一条语句,直到执行完最后一条语句结束,但是生活中经常需要进行条件判断,根据判断结果决定是否做一件事情。本章将学习选择结构来解决这样的问题。
对于很多复杂的需求,基本的if条件判断语句也解决不了。因此,本章我们还会学习复杂的选择结构,主要包括多重if选择结构、嵌套if选择结构。在学习的过程中,要理解每种选择结构的语法特点,并体会它们的适用场合,以达到灵活应用的目的。另外,要思考程序中可能发生的异常状况,并对于可能出现的问题进行处理,如输出相应的信息,给用户友好提示。通过对异常状况的考虑和处理,增加程序的健壮性。
预习作业
指导:请按以下步骤预习本章内容:
1. 阅读、学习本章内容。
2. 标注出本章看不懂或存在疑惑的部分。
3. 整理、记录学习中的问题。
4. 熟记本章的英文单词。
1. 背诵英文单词
请在预习时找出下列单词在教材中的用法,了解它们的含义和发音。
(1) if [ɪf]:conj.(表条件)如果;(表假设)要是,假如;n. 条件,设想;不确定的情况
(2) else [els]: adv. 其他;否则;另外;adj. 别的;其他的
(3) break [breɪk]: v. 打破;(机器)失灵;打断
(4) continue [kənˈtɪnjuː]: vi. 继续,延续;仍旧,连续
(5) match [mætʃ]: (计算机)匹配;配合;搭配;相似的东西;婚姻;配偶
(6) gender [ˈdʒendər]: n. 性;性别;
(7) random [ˈrændəm]:adj. [数] 随机的;任意的;胡乱的;n. 随意
(8) score [skɔːr]: n.分数;n. 分数;vi. 得分;记分;
2. 预习并回答以下问题
请阅读本章内容,在作业本上完成以下简答题。
(1) if-else 选择结构的语法和执行顺序是什么?
(2) if 选择结构书写规范有哪些?
(3) 找出下面代码中的错误并更正,然后写出更正后代码的输出结果。
import java.util.Scanner; public class yuxi { public static void main(String[] args) { System.out.println("请输入整数:"); Scanner input = new Scanner(System.in); int num = input.nextInt(); if (num>=20) num--; System.out.println("num=" + num); else { num++; System.out.println("num=" + num); } } }
3. 预习并完成编码题
(1) 编写并完成本章中所有示例代码。
(2) 请使用 Java 语言编写代码,完成以下功能。
从键盘上输入自己的年龄,如果大于或等于 18 岁,则输出 "我是成年人了,可以为爸爸妈妈遮风挡雨啦!",否则,输出"我还需要爸爸妈妈的呵护哦厂。
技术内容
3.1 if 选择结构
3.1.1为什么需要if 选择结构
前面提到,在生活中我们经常需要做判断,然后才能够决定是否做某件事情。例如,如果妈妈今天过生曰,你将送给妈妈一份礼物;如果地球上没有了水,人类将濒临灭绝。
现在就用 Java 程序解决下面的问题。
问题:如果张浩的 Java 考试成绩大于 98 分,那么张浩就能获得一个 MP4 作为奖励。
分析:现在已经知道如何编写 “Hello World” 的程序,但是有时需要先判断一下条件,条件满足则输出,条件不满足则不输出。这个问题就需要先判断张浩的 Java 成绩,他的 Java成绩大于 98 分时,才有奖励。对于这种 “需要先判断条件,条件满足后执行” 的程序,需要 if 选择结构来实现。
3.1.2 什么是if选择结构
if 选择结构是根据条件判断之后再做处理的一种语法结构。下面看一下最基本的 if 选择结构的语法。
语法:
if ( 条件 ) { 代码块 //条件成立后要执行的代码,可以是一条语句,也可以是一组语句 }
假
条件
真
条件
图 3.1 if 选择结构流程图
图 3.1 是代码的图形化表示,称为流程图。结合流程图来看, if 选择结构的含义和执行过程就一目了然了。图中带箭头的线条表示的是流程线,也就是程序执行的过程。首先,对条件进行判断。如果结果是真,则执行代码块;否则,执行代码块后面的部分。
因此,关键字 if 后小括号里的条件是一个表达式,而且表达式的值必须为 true 或 false。
程序执行时,先判断条件。当结果为 true 时,程序先执行大括号里的代码块,再执行 if 结构(即部分)后面的代码。当结果为 false 时,不执行大括号里的代码块,而直接执行 if 结构后面的代码。
下面看一看如下程序如何执行。
public class excample { public static void main(String[] args) { //语句1; //语句2; if (条件) { //语句3; } //语句4; } }
回想第1章和第2章所编写的程序,main()是程序的入口,main()中的语句将逐条顺序地执行,所有的语句都执行完毕后程序结束。因此,程序开始执行后,首先执行语句1和语句2,然后对条件进行判断。如果条件成立,则执行语句3,然后跳出if结构块执行语句4;如果不成立,则语句3不执行,直接执行语句4。
经验:当if关键字后的一对大括号里只有一个语句时,可以省略大括号。但是为了避免有多个语句时遗忘大括号,以及保持程序整体风格一致,建议不要省略if结构块的大括号。
解释:流程图:逐步解决指定问题的步骤和方法的一种图形化表示方法。流程图直观、清晰地帮助我们分析问题或设计解决方案,是程序开发人员的好帮手。流程图使用一组预定义的符号来说明如何执行特定的任务。表3-1为符号汇总。
表3-1符号汇总
3.1.3 如何使用 if 选择结构
1. 使用基本的 if 选择结构
使用基本的 if 选择结构解决 3.1.1 节中的问题,代码如示例 1 所示。
示例1
package cn.jbit.ifdemo; import java.util.Scanner; public class GetPrize { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("输入张浩的Java成绩: "); //提示要输入Java成绩 int score = input.nextInt(); //从控制台获取Java成绩 if ( score > 90 ) { //判断是否大于90分 System.out.println("老师说:不错,奖励一个MP4!"); } } }
这里输入张浩的成绩后,通过判断得知是否大于98分。若大于98,则会输出"老师说:不错,奖励一个MP4!",如图3.2所示;否则,不会输出这句话。通过这个简单的例子,可体会if选择结构先判断后执行的方式。
图 3.2 示例 1 的运行结果
2.使用复杂条件下的if选择结构
问题:如果张浩的 Java 成绩大于 98 分,而且音乐成绩大于 80 分,则老师奖励他;或者如果其Java 成绩等于 100 分,音乐成绩大于 70 分,老师也可以奖励他。
分析:这个问题需要判断的条件比较多,因此需要将多个条件连接起来, Java 中可以使用逻辑运算符连接多个条件。常用的逻辑运算符如表 3-2 所示。
表 3-2 常用逻辑运算符
现在考虑一下怎么连接问题中的条件,首先抽取问题中的条件。
张浩Java成绩〉98分 并且 张浩音乐成绩〉80分
或者
张浩Java成绩= = 100分 并且 张浩音乐成绩〉70分
提取出了条件,是否可以这样编写条件呢?
第一种写法:
score1>98 && score2>80 || score1==100 && score2>70
第二种写法:
(score1>98 && score2>80) || (score1==100 && score2>70)
其中, scorel 表示张浩的 Java 成绩, score2 表示张浩的音乐成绩。显然第二种写法更清晰地描述了上述问题的条件。
经验:当运算符比较多,无法确定运算符执行的顺序时,可以使用小括号控制。
上述问题的完整代码如示例 2 所示。
示例2
package cn.jbit.ifdemo; public class GetPrize2 { public static void main(String[] args) { int score1 = 100; //张浩的Java成绩 int score2 = 72; //张浩的音乐成绩 if ((score1>98 && score2>80) || (score1==100 && score2>70)) { System.out.println("老师说:不错,奖励一个MP4!"); } } }
程序运行结果如图 3.3 所示。
图 3.3 示例 2 的运行结果
3.使用if-else选择结构
问题:如果张浩的 Java 成绩大于 98 分,那么老师奖励他一个MP4; 否则老师罚他编码。
分析:与上面的 if 选择结构不同的是,除了要实现条件成立执行的操作以外,还要实现条件不成立时执行的操作。
当然,这个问题可以用两个 if 选择结构来实现,如示例 3 所示。
示例3
package cn.jbit.ifdemo; public class SimpleIf2 { public static void main(String[] args) { int socre = 91; //张浩的Java成绩 if (score > 98) { System.out.println("老师说:不错,奖励一个MP4!"); } if (score <= 98) { System.out.println("老师说:惩罚进行编码!"); } }
}
使用两个 if 选择结构看起来冗长,实际上有一种语法结构可以更好地解决这个问题,就是 if-else选择结构,表示"如果xx, 就xx; 否则,就xx"。这看起来很像小学时候的造句。使用 Java程序语言编写程序的过程,就是造句的过程,只是不是用汉语造句,而是用 Java 语言造句。
if-else 选择结构的语法如下。
语法:
if (条件){ //代码块1 }else { //代码块2 }
图 3.4 形象地展示了 if-else 选择结构的执行过程。
按照需求,画出流程图来分析要解决的问题,如图 3.5 所示。
真
假
代码块2
代码块1
条件
声明score并赋值
真
奖MP4
罚编程
score>98?
结束
假
开始
图 3.4 if-else 选择结构流程图 图 3.5 画出流程图来分析问题
结合流程图,使用 if-else 选择结构进行编程。改写示例 3 中的代码,如示例 4 所示。
示例4
package cn.jbit.ifdemo; public class SimpleIf3 { public static void main(String[] args) { int score = 91; if (score > 98) { System.out.println("老师说:奖励一个MP4!"); } else { System.out.println("老师说:惩罚进行代码!"); } } }
程序运行结果如图3.6所示。
图 3 6 示例 4 的运行结果
小结:到此为止,需要掌握的 if 选择结构如下:基本的 if 选择结构,只有一个 if 块; if-else 选择结构 , 有 if 块和 else 块。
3.2 技能训练1
上机练习1
指导——升级“我行我素购物管理系统”,实现幸运抽奖
需求说明
商场实行新的抽奖规则:如果会员号的百位数字等于产生的随机数字,则该会员为幸运会员,且实现如下要求。
♦从键盘上接收会员号。
♦使用 if-else 选择结构实现幸运抽奖。
♦ 运行结果如图 3.7 和图 3.8 所示。
图 3.7 幸运会员输出结果 图 3.8 非幸运会员输出结果