第4章用如果造句——条件语句•如果洪七公赢了,就去加入丐帮,如果黄药师赢了,就去加盟桃花岛。江湖之中绝不自断后路,一种计划不行,就得立即启动各种预案,争取在江湖中的生存与荣耀。如果……,就……,很熟悉呢,没错,江湖人就得学会分析条件,先用如果大胆预测,再用就来决策可能的行为,相当不错的买卖,保证左右逢源,江湖不险。本章将讲述如何在Java的世界里,处变不惊,熟练而轻松的应对各种复杂多变的条件,主要知识点如下。•怎样使用关系条件。•逻辑条件是什么。•怎样用如果造句。•怎样处理如果中的如果怎么。•奇妙的开关语句。4.1如果……•岔路口是常见的,怎么走正确的方向,就需要好好的来掂量下现有的条件,按条件来选择目前最应该走的路。在进行这种思考的时候,通常会用到如果这个关键字。本节将说明怎么用Java来处理岔路口的问题,以及在Java中怎么来说出如果……。4.1.1关系条件•【本小节代码示例参考:\源代码\C04\src\TestRelation.java】•在第3章中笔者说过,会有一些运算符要在第4章中进行说明,那这些在第3章里被刻意遗漏的运算符是什么呢。其中之一就是关系条件运算符,留到本章的原因很简单,因为这些运算符就是为了与“如果”配套使用而生的,如图4.1所示。4.1.2逻辑条件•【本小节代码示例参考:\源代码\C04\src\TestLogic.java】•有些事情不太可能做到完美,那么一般就会要求得马虎些,这种情况下就是“或”的用武之地。例如,中国男足要出战世界杯,大伙就没啥要求,只要能进三个球或者踢赢一场就算胜利。两个条件一起进行考虑,但只要任何一个符合就算达标的,这种就是或的算法。•然而人家巴西肯定不是这样,人家要的是进10个球以上,外加赢5场以上,两个目标一个不达标都不算胜利。像这种两个条件同时起作用,都必须达标才算合格的,就是与的算法。与和或在Java中是怎样表达的呢,且看:•&&将两个boolean型的结果进行与运算。•||将两个boolean型的结果进行或运算。4.1.3用问号写最简洁的如果句子•【本小节代码示例参考:\源代码\C04\src\TestLogic.java】•有没有一种格式的if语句可以更简洁些?强大的Java当然会有完美的答案,这个答案就是使用“?:”运算符。情景:某人去银行取钱,他先查了一下余额,因为他有一个小小的决定,那就是当余额多于10000万元就取5000元去买台电脑,但是如果没那么多钱的话,就只取500块钱零花。显然,这是一个如果的问题,用if是这么做的:4.2否则……•【本节代码示例参考:\源代码\C04\src\TestAdvancedIf.java】•如果的句式还会有些比较复杂的用法,毕竟很多时候,会就非常多的条件进行选择,而不是简单的二元选择。本节就对此作些补充的讲解,较难的知识点是:多重如果嵌套的应用。4.2.1如果与否则if…else…•很多时候的判断是非此即彼,用中文造句的说法是:如果……就……,否则……。仍然用取钱的例子。改成加上了否则来造句:如果银行卡上的余额大于或等于10000元就取5000元去买电脑,否则只取500块零花。对比一下,在4.1.3节中,用了两个如果造的句子,在这里,加了否则就变得简洁了很多。用文字造句有这样的效果,那Java呢?请看:•intremain=9000;/*声明余额为9000*/•intwithdraw=0;/*待取的钱不确定,先声明为零。*/•/*如果钱多于10000取5000,否则只取500*/•if(remain=10000){•withdraw=5000;/*确定可以取5000*/•}else{•withdraw=500;•}•System.out.println(余额是:+remain+;决定取:+withdraw);4.2.2如果里的如果——if嵌套•前面的条件判断都还是比较复杂的,有时候并不总是这么简单。条件需要细分,层层相套也就成了必然。情景:某人还是去取钱,这回他的想法有了些变化,他的决定如下:•(1)如果余额多于1万块,但是少于2万块,就取7000块买台较好的台式机。•(2)如果余额大于2万块,就取15000块买台thinkpad。•(3)如果余额小于1万块,且多于5000块,就取3000块买部智能手机。•(4)如果余额小于5000块,太穷了,就取600块买个山寨机。•好多的如果,会不会有些眼晕,这只是开始,笔者演示了3种if的组合方式来实现这段代码:•第一种:纯粹地用if来实现。•第二种:用if……elseif……来实现。•第三种:用嵌套的if来实现。4.3开关switch•用过电视遥控器吧,按一个按钮,就能换一个频道,相当的方便与快捷。不需要太多的判断,仅仅只是进行简单的比对,1对应1频道,2对应2频道。在Java中要怎样做才能实现这种功能呢?本节就来说说这个问题。4.3.1switch怎么用•switch是Java中的开关语句,与电视遥控器的功能类似,能够接受相关的指令来执行一些特定的具体操作。本节将从switch本身的用法及与if的两方面对比进行讲解。switch只能接受特定的数据类型作为指令,这些类型包括:byte、char、short、int、Character(Java5及以上支持)、Byte(Java5及以上支持)、Short(Java5及以上支持)、Integer(Java5及以上支持)。•注意:上面的类型其实有一个共同的特点,请回忆一下基本类型章节的内容,然后融会贯通一下。4.3.2switch与if的比较•聪明的读者肯定发现了,switch的功能用if语句也能达到相同的效果,以日期转换的代码为例,用if的实现如下:•01/*---------用if实现的示例-----------*/•02if(day==1)//判断是否传入日期为1•03System.out.println(Monday);•04elseif(day==2)//判断是否传入日期为2•05System.out.println(Tuesday);•06elseif(day==3)//判断是否传入日期为3•07System.out.println(Wednesday);•08elseif(day==4)//判断是否传入日期为4•09System.out.println(Thursday);•10elseif(day==5)//判断是否传入日期为5•11System.out.println(Friday);•12elseif(day==6)//判断是否传入日期为6•13System.out.println(Saturday);•14elseif(day==7)//判断是否传入日期为7•15System.out.println(Sunday);•16else//如果都不是则•System.out.println(一周没有这一天哦.);4.3.3用switch写个红绿灯开关•通过4.3.1节的学习,应该完全熟悉了switch的使用,笔者想多来一个示例,加深读者对switch开关特性的理解。毕竟开关特性才是switch的专长,也是switch区分于if的地方。最好的示例是什么呢,来看情景:在十字路口,交通太繁忙了,为了更好的交通环境,决定装一个红绿灯。现在这个红绿灯的开关设计安排了用Java来实现。红绿灯,需要按三种不同的信号来开不同的灯,假设这三种信号为:•(1)1代表开红灯的信号。•(2)2代表开绿灯的信号。•(3)3代表开黄灯的信号。4.4小结•向左走,向右走,这是每天都要碰到的问题。本章主要就是讲述了碰到这种头痛的分支时,怎么用Java来进行理性而优雅的处理。在本章,主要的学习内容有:•条件运算怎么做。•逻辑运算的处理。•用if进行分支处理。•if的各种实现形式。•switch控制开关式分支。•在接下来的第5章里,将讲述如何高效地处理重复、重复又重复的问题,拭目以待吧!4.4习题•【本章习题答案在光盘中\习题.doc】•通过下面的习题来检验本章的学习,习题答案参考光盘。•1.用来判断如果条件的关键字是____。•2.withdraw=remain=10000?5000:500,在这段代码中,如果remain为1100,那么withdraw会是多少?•3.switch语句可用哪些数据类型做参数?•4.以下代码的执行结果会是什么,为什么?•intsignal=1;•switch(signal){•case1:•System.out.println(红灯);•case2:•System.out.println(绿灯);•case3:•System.out.println(黄灯);•break;•default:•System.out.println(默认开绿灯);•break;•}