购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.3 分支结构

分支结构又称为选择结构,是一种在两种以上的多条执行路径中选择一条执行的控制结构,这里所说的执行路径是指一组语句。通常分支结构要先做一个判断,然后根据判断的结果来决定选择哪一条执行路径。

4.3.1 if条件语句

if语句是Java程序中最常见的分支结构,每一种编程语言都有一种或多种形式的该类语句,它是一种“二选一”的控制结构,即给出两种可能的执行路径供选择。分支前的判断称为条件表达式,简称为条件,它是一个结果为逻辑型量的关系表达式或逻辑表达式,根据这个表达式的值是“真”或“假”来决定选择哪个分支来执行。

if语句有多种形式的应用,下面分别介绍。

第一种应用的格式为双路条件选择,其结构如下。程序执行流程如图4.2所示。

图4.2 双路条件选择结构执行流程

     if(条件表达式)
     {
         语句序列1
     }
     else
     {
         语句序列2
     }

if和else都是Java语言的关键字,执行if语句时,程序先计算条件表达式的值,如果值为“真”,则执行“语句序列1”;如果值为“假”,则执行“语句序列2”。

注意: 这里分支的语句序列如果只有一个语句,则不需要用大括号括起来;否则,分支中的所有语句都需要用大括号括起,以便与分支之外的语句相区分。

图4.3 单路条件选择结构

第二种应用格式为单路条件选择,其结构如下。程序执行流程如图4.3所示。

     if(条件表达式)
     {
         语句序列
     }

即只有if分支,没有else分支,如果条件表达式成立,则执行语句序列,否则直接执行if语句之后的其他语句。

【例4.1】 找出三个整数中的最大值和最小值。

从两个方案中选择其一可以使用一个if语句,而从三个方案中选择其一可以使用两个if语句。本例使用了两个并列的if语句,其中,第二个if语句没有else语句。除此之外,本例使用了三元条件运算符(?:)解决同样的问题。程序如下:

程序运行结果:

     Max=3
     Min=1

该程序的第7~10行是双路条件选择语句,用于求a与b中较大的数存入变量max中;第11行是单路条件选择语句,用于将max与c比较;第13、14两行分别用条件运算符来代替简单的双路条件选择语句,求a、b和c三个数中的最小数。

第三种应用格式为多重条件选择结构,其结构如下。程序执行流程如图4.4所示。

图4.4 多重条件选择结构执行流程

该语句的功能是对else if进行了更多的条件判断,不同的条件对应不同的语句序列。同时,if语句还可以进行语句的嵌套。需要注意的是,在使用if嵌套语句时,最好使用{}来确定相互的层次关系。

注意: 在Java语言中,if()和else if()括号中条件表达式的结果必须是逻辑型量(即true或false),这一点与C和C++语言不同。

【例4.2】 给出一个分数,按不同的分数段将其评定为A、B、C、D和E五个档次之一。

程序运行结果:

     评定成绩为:B

由于给定的成绩testScore为86分,所以满足第10行的条件语句,所以将其成绩变量grade赋值为B,然后直接执行第19行的输出语句,将评定的成绩输出。

4.3.2 switch选择语句

在多重条件选择的情况下,可以使用if-else结构来实现其功能,但是,使用多分支开关语句会使程序更为精练、清晰。switch语句就是多分支开关语句,常用于多重条件选择。它将一个表达式的值同许多其他值比较,并按比较结果选择执行哪些语句。switch选择语句的格式如下:

switch多分支选择语句在执行时,首先计算圆括号中“表达式”的值,这个值必须是整型或字符型,同时应与各个case后面的常量表达式值的类型相一致。计算出表达式的值后,将它先与第一个case后面的“常量表达式1”的值相比较,若相同,则程序的流程转入第一个case分支的语句序列;否则,再将表达式的值与第二个case后面的“常量表达式2”相比较。依次类推,如果表达式的值与任何一个case后的常量表达式值都不相同,则转去执行最后的default分支的语句序列,在default分支不存在的情况下,则跳出整个switch语句。在每个case语句后要用break退出switch结构。其中,break是流程跳转语句,它的其他用法将在4.5节介绍。

【例4.3】 利用switch语句来判断用户从键盘上输入的运算符,再输出计算后的结果。

程序运行结果:

     请输入运算符:/↙
     100/6=16.666666

该程序的第6行是将两个整数分别存入变量a和b中,第9行是从键盘输入一个字符,并将其存放到字符型变量oper中,然后执行switch语句,将变量oper中的字符与每个case后的字符型常量相比较,如果是+、—、*、/四个符号之一,则执行相应case分支下的语句,输出相应的计算结果,然后退出switch语句;若输入的不是上述四个符号之一,则执行default分支下的语句,输出“输入的符号不正确!”内容后结束程序的执行。

说明: switch语句的每一个case判断,在一般情况下都有break语句,以指明这个分支执行完后,就跳出该switch语句。在某些特定的场合下可能不需要break语句,例如,要若干判断值共享一个分支时,就可以实现由不同的判断语句流入相同的分支。

【例4.4】 从键盘上输入一个月份,然后判断该月份的天数。

程序运行结果为:

     请输入月份:6↙
     6月份为30天

该程序的第8~10行将从键盘上读入的整数存入变量month中。之后进入switch语句首先计算月份变量month,然后根据其值来计算天数。从该程序中可看出,第15~18行的case共用一个break语句,即switch语句的每个case判断,都只负责指明分支的入口点,而不指定分支的出口点,分支的出口点需要用相应的跳转语句break来标明。如果将第14、19行的break语句去掉,输入的值仍然是6,执行完switch语句后,变量days的值被修改成什么呢?是31,而不是30,也不是28,因为case判断只负责指明分支的入口点。程序中第16行则是本次执行的分支的入口点,由于没有专门的出口,所以流程将继续沿着下面的分支逐个执行,执行到第18行时days的值被修改为30,当执行到第19行才跳出switch语句。所以如果希望程序的逻辑结构正常完成分支的选择,需要为每一个分支另外编写退出语句。 ib6xwGjY/7XJGQT0iGBceEVFDdoFo74klvKk5K1Y9t39nhRZNTXyXue+MZ3gA4yY

点击中间区域
呼出菜单
上一章
目录
下一章
×