当前位置:文档之家› 第三章。运算符和表达式2、分支结构

第三章。运算符和表达式2、分支结构

Top1.运算符和表达式-22.分支结构1. 运算符和表达式-21.1. 赋值运算1.1.1. 使用“=”进行赋值运算“=”称为赋值运算符,用于对变量赋值。

关于赋值运算符,除了将右边的表达式计算出来赋给左边以外还具备如下特点:赋值表达式本身也有值,其本身之值即为所赋之值。

示例代码如下所示:1.int num =18, index;2.System.out.println(index = num %5);// 结果为:3,赋值表达式本身也有值3.System.out.println(index);// 结果为:34.int a, b, c;5. a = b = c =100;6.// c=100 整个表达式的值为100,将其赋值给b,同样b=(c=100)整个表达式的值也为100,然后有将这个值赋给了a,所以a 的值也是100。

1.1.2. 使用扩展赋值表达式在赋值运算符”= ”前加上其它运算符,即为扩展赋值运算符,其效率高于赋值运算符,推荐使用,扩展赋值运算符如下图- 5所示:图- 51.2. 字符连接运算1.2.1. 使用“+”进行字符串连接“+”除了可以进行算术运算以外,还可以实现字符串的连接,同时可以实现字符串与其他数据类型的“相连”。

当+ 号作用于两个数字类型变量时,是在进行算术运算。

当+ 号两边的变量有一个是字符串类型,即””括起来的时候,则其进行的是字符串的连接,连接后的结果为字符串类型。

示例代码如下所示:1.int a =100;2.String msg ="a="+ a;3.System.out.println(msg);//a=100,字符串拼接4.msg =""+100+200;5.System.out.println(msg);//结果为: 100200,””+100,为字符串100再拼上200为1002006.msg =100+200+"";7.System.out.println(msg);//结果为:300,100+200为算术运算结果为300,再加上””为3001.3. 条件(三目)运算1.3.1. 使用条件(三目)运算符条件运算符又称“三目”运算符,其结构为:boolean表达式? 表达式1:表达式2。

条件运算符的规则如下:1.先计算boolean表达式;2.如果boolean表达式的值为true,整个表达式的值为表达式1的值;3.如果boolean表达式的值为false,整个表达式的值为表达式2的值。

示例代码如下:1.int a =100, b =200;2.int flag = a > b ?1:-1;//因为a>b为false,所以整个表达式的值为-1,将其赋给flag,即:flag的值为-1。

1.3.2. 条件(三目)运算符的嵌套条件运算符可以嵌套使用,所谓嵌套是指在条件(三目)表达式:“boolean 表达式? 表达式1:表达式2”中的表达式1或表达式2也是条件(三目)表达式,相当于多重判断,示例代码如下所示:1.int a =-3;2.String r = a >0?"正数":(a ==0?"0":"负数");3.System.out.println(r);//结果为负数,因为 a 的值小于 0,即boolean 表达式的值为 false ,则取问号后第二个表达式的值作为表达式的结果。

而问号后的第二个表达式也是一个三目运算符所构成的表达式。

因为 a==0 表达式的值为false,则取“负数”为表达式的结果。

2. 分支结构2.1. 什么是分支结构首先,看一个需求,假设需要编写一个收银柜台收款程序,要求根据商品单价、购买数量以及收款金额,计算并输出应收金额和找零。

通过分析可以想到,这个程序,需要定义三个输入,即:单价、数量、金额。

定义两个输出,即:应收金额、找零。

因为金额有可能为小数类型,所以变量的数据结构定义为double类型。

此程序可以以如下方式解决,用户由控制台输入:商品单价、购买数量、收款金额;而后计算商品的总价及找零,并输出。

示例代码如下所示:1.public static void main(String[] args){2.//定义输入3.Scanner console =new Scanner(System.in);4.System.out.println("请输入单价(¥):");5.double unitPrice = console.nextDouble();6.System.out.println("请输入数量:");7.double amount = console.nextDouble();8.System.out.println("请输入金额(¥):");9.double money = console.nextDouble();10.console.close();11.12.//计算商品总价13.double totalPrice = unitPrice * amount;14.//计算找零15.double change = money - totalPrice;16.17.//输出18.System.out.println("应收金额为:"+ totalPrice +",找零为:"+ change);19.}如上代码,输入数据后,可以正确输出应收金额及找零,假设现在需求增加,当商品总价满500时享受8折优惠,如何解决?这种情况,在软件应用中,需要使用分支结构来实现。

任何复杂的程序逻辑结构都可以通过“顺序”,“分支”,“循环”这三种基本的程序结构实现。

如图–1所示:图- 1刚刚的案例即为顺序结构,第一步A执行完执行第二步B,第二步执行完执行第三步,一步一步顺序执行。

分支结构即为根据一个条件做判断,如果条件满足则执行A,否则执行B。

还有一种即为后面要介绍的循环结构。

原则上,任何复杂的程序,都可以通过这三种结构来解决。

当程序在运行过程中,需要根据不同的条件而运行不同的语句时,即可以使用分支结构,Java中有专门的语法结构来实现分支:1.当条件满足时运行某些语句;当条件不满足时则不运行这些语句——if结构。

2.当条件满足时运行某些语句;当条件不满足时运行另外一些语句——if-else结构2.2. if语句2.2.1. if语句的执行逻辑首先看下面if语句的语法:1.语句0;2.if(逻辑表达式){3.语句1;4.语句2;5.}6.语句3;如上语句的执行步骤如下所示:步骤一:执行语句0;步骤二:判断逻辑表达式的值,此表达式的值结果为boolean类型,即true 或者false。

此处可以是关系表达式也可以是逻辑表达式。

1.若值为true,则执行if语句块中的语句;2.若值为false,则跳过if语句块;步骤三:执行语句3语句。

2.2.2. if语句流程图if语句的执行逻辑如下图- 2所示:图- 2通过图示得出结论:当条件满足时,执行语句块,然后执行if语句下面的语句;否则跳过语句块,直接执行if语句下面的语句。

2.2.3. if语句用于处理分支逻辑if语句是java中用于处理分支结构的语句,下面,通过if语句来实现刚刚的打折功能逻辑,再回顾一下新添的需求:如果商品总价大于等于500,则打8折。

如下图–3 红色部分即为if的判断逻辑:图- 3可以看到,计算商品总价之后,进行了总价大于等于500的业务判断,若判断结果为true,则计算折扣后的应收金额,再计算找零后输出。

若判断结果为false,则直接计算找零后输出。

如下即为实现代码:1.……2.double totalPrice =……;3.if(totalPrice >=500){4.totalPrice = totalPrice *0.8;5.}6.……通过如上代码可以看出:当total>=500为true时,总额乘以0.8,即打8折。

当total>=500为false时,不执行if语句块的内容。

2.2.4. if语句块不要省略“{}”if语句块在执行过程中,有一个问题是需要注意的,先看下面的两段代码:1.代码一:2.int num =5;3.if(num>2)4.System.out.print(num);5.System.out.println(“大于2”);6.代码二:7.int num =5;8.if(num>2){9.System.out.print(num);10.System.out.println(“大于2”);}分析如上两个代码段,得出的结论是:两段代码输出结果一样,即“5 大于2”。

再看如下两段代码,输出结果还一样吗?1.代码一:2.int num =5;3.if(num<2)4.System.out.println(num);5.System.out.println(“小于2”);6.代码二:7.int num =5;8.if(num<2){9. System.out.print(num);10. System.out.println(“小于2”);}分析如上两个代码段,可以得出,代码段一的输出结果是“大于2”,代码段二没有任何输出。

分析输出结果可以看出,代码段二的结果为正确结果,而代码段一输出的“小于2”是不应该存在的,出现这个问题的原因在于,在if语句之后没有添加“{}”,而java语法规定,当if语句块中只包含一条语句时,可以省略“{}”,但是if语句块也只能作用于它下面的一条语句。

看如上代码段一的if判断,只作用于第一个输出语句,因为num<2结果为false,所以第一个输出语句并未执行,而第二个输出语句“小于2”不属于if作用范围,所以无论条件满足与否,都会执行。

故而,输出了“小于2”的结果。

所以,考虑到代码的可读性、扩展性,建议即便if语句块中只有一条语句,也不要省略“{}”。

2.3. if-else语句2.3.1. if-else语句的执行逻辑分析上面的案例,当计算出最终(打折前、打折后)的应收金额后,直接计算找零,这个时候就出现了一个问题,如果收款的金额小于应收的金额,那么输出的找零就会为负数结果,这显然用户体验不好,下面对它做一下改进,要求考虑程序的异常情况,增加需求如下:1.若收款金额大于等于应收金额,则计算找零后输出;2.若收款金额小于应收金额,则输出错误提示信息,如何处理?这种情况,单单使用if语句显然无法解决了,因为if语句用于解决的是,当某条件满足时执行某段业务处理的逻辑,而现在的逻辑时,当条件满足时执行某段业务逻辑,当条件不满足时需要执行另一段业务逻辑。

相关主题