java选择结构-1

简介: 本章任务命令实现幸运抽奖实现会员信息录入实现按会员优惠计划进行购物结算实现会员折扣的计算本章技能目标

本章任务


命令实现幸运抽奖

实现会员信息录入

实现按会员优惠计划进行购物结算

实现会员折扣的计算

本章技能目标


命实现幸运抽奖

实现会员信息录入

实现按会员优惠计划进行购物结算

实现会员折扣的计算

本章简介


上一章我们学习了变量的概念和一些常用的数据类型,主要有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符号汇总



image.png


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 常用逻辑运算符



image.png


现在考虑一下怎么连接问题中的条件,首先抽取问题中的条件。


张浩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 非幸运会员输出结果


相关文章
|
13天前
|
JSON Java 程序员
Java|如何用一个统一结构接收成员名称不固定的数据
本文介绍了一种 Java 中如何用一个统一结构接收成员名称不固定的数据的方法。
22 3
|
2月前
|
存储 算法 Java
🚀Java零基础-顺序结构详解 🚀
【10月更文挑战第11天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
36 6
|
5月前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
75 0
|
2月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
53 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
4月前
|
存储 Java 数据库连接
Java类文件结构及类加载机制
该文章主要讨论了Java类文件的结构以及Java类的加载机制,并提到了双亲委派模型的相关内容。
Java类文件结构及类加载机制
|
4月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
4月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
|
4月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
|
4月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
|
4月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之dal层中的mapper数据源类型进行组织的问题如何解决
Java应用结构规范问题之dal层中的mapper数据源类型进行组织的问题如何解决