数据分析侠 2017-12-11
条件语句可根据不同的条件执行不同的语句。条件语句包括if条件语句和switch多分支语句。
If条件语句是一个重要的编程语句,它用于告诉程序在某个条件成立的情况下执行某段程序,而在另一种情况下执行另外的语句。
使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“布尔表达式”,如果该表达式返回的结果是true,则执行其后的语句;若为false,则不执行if条件之后的语句。If条件语句可分为简单的if条件语句、if...else语句和if...else if多分支语句。
语法格式如下:
if(布尔表达式){ 语句序列 }
l布尔表达式:必要参数,表示它最后返回的结果必须是一个布尔值。它可以是一个单纯的布尔变量或常量,或者使用关系或布尔运算符的表达式。
l语句序列:可选参数。可以是一条或多条语句,当表达式为true时执行这些语句。如果语句序列中仅含有一条语句,则可以省略条件表达语句中的大括号。
【例5.2】创建IfPractice类,进行简单if条件语句的练习
class IfPractice{ public static void main(String[] args){ int a = 23 , b = 24 ; boolean boo = true ,aoo = false ; if(! false == boo || (5 == 6)){ System.out.println("表达式的形式可以多样但其结果必须为boolean类型"); } if(5 == 6);{ System.out.println("如果if条件语句后即()后直接跟;则该条if简单语句语句无论是否成立都继续下面代码"); } if(a < b){ if( a < b){ System.out.println("If语句可以像复合语句一样嵌套语句!"); } System.out.println("简单if语句的标准形态;"); } if(aoo) System.out.println("简单if语句序列中若只有一条语句则可以省略{}这时并无语法错误,并且if语句的作用范围也可覆盖,但不支持,为了增强阅读性"); System.out.println("if语句若省略{},那么其作用范围只是紧随其后的一条语句,其他的语句会线性执行,不会受其表达式的影响!"); if(boo){}//当简单if语句序列中没有内容时可以省略{},末尾加;,当然也可以保留, if(a < b && boo){ System.out.println("简单if语句中的条件一定要是布尔表达式,也就是结果必须是布尔型,格式不限制"); } /*if(3 = 3){ System.out.println("我们一定要确定if语句条件表达式的数据类型,如上3是int型,结果也是int型,会爆出错误以外的类型"); }*/ } }
If语句注意点: a,每一种格式都是单条语句。 b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以写在其他表达式中。 c,条件表达式无论写成什么样子,只看最终的结构是否是true或者false; D.if语句同复合语句一样可以嵌套语句 | If语句流程运行图: |
If....else语句和三元运算符的区别 | If ....else语句的执行行程图 |
对于if...else语句可以使用三元运算符对语句进行简化,如下面的代码if(a > 0) b = a ; else b = -a; 可以简化成: b = a>0?a:-a;上面代码为求绝对值的语句,如果a > 0,就把a的值赋给b,否则将-a赋值给b。也就是“?”前面的表达式为真,则将问号和冒号之间的表达式的计算结果赋值给变量b,否则将冒号后面的计算结果赋值给b,使用三元运算符的好处是可以使代码简洁,并且有一个返回值。 | 图3.4 if...else语句的执行过程图 |
在第一种简单if语句中条件不成立时if语句不能给出任何反馈,这是出现了第二种if语句当条件表达式的结果为true则执行语句1,否则执行语句2.
注意事项:
A.else没有条件表达式
B.else必须和if组合使用,else不能单独使用 会报错
C.一个if语句只能有一个else
else是可以省略的,当知道条件表达式成立时,可以省略else,这时就相当于1.1if语句
if语句和else量和使用时,if如果控制多行语句就一定要加{},否则出现B错误,这是情况为if语句+输出语句+else,B情况产生,如果if控制一行else控制一行时大括号能省,这是如果条件表达式为true则进行紧挨if语句的输出,反之输出else,当if控制一行else控制多行时如果条件表达式为true则进行紧挨if语句的输出,else中输出除去紧挨else的语句 反之else中输出,所以Java中不管什么情况不要省略{},避免错误
【例5.3】创建IfElsePractice类,并针对if....else的一些特性进行验证
class IfElsePractice{ public static void main(String[] args){ /*else{ System.out.println("else必须和if语句连用,不能单独使用,否则会错误,有'if',但是没有'else'"); }*/ if(5 > 6){ System.out.println("我们可以看到简单if语句条件不成立时,if语句不能出现任何反馈,那么我们怎么知道是条件不成立还是程序错误呢,这时就出现了if...else语句"); } if(5 > 6){ System.out.println("为补充if语句而出现的if...else语句"); }else/*(5 < 6)*/{ System.out.println("if...else语句中else语句后不能有条件语句直接跟随{},如果跟随(),会发出错误,提示在()后加;"); }/*else{ System.out.println("一个if语句只能和一个else语句连用,否则会错误,有'if',但是没有'else'"); }*/ if(5 < 6){ System.out.println("当if后面只控制一条语句时,可以省略{},它会直接输出,否则不支持,因为它只会输出紧跟他的一条"); }else{ System.out.println("当else后面只控制一条语句时,可以省略{},它会直接输出,否则不支持,因为它只会输出紧跟他的一条"); } /*if(5 > 6) System.out.println("{}省略"); 当if...else...语句中,if后边控制多条语句时,{}不可 以省略,否则会报错“有if没有else” System.out.println("{}省略"); else{ System.out.println("{}省略时,"); }*/ //嵌套语句在if...else语句中的应用 if(true){ if(false){ System.out.println("嵌套语句在if...else中的使用"); }else{ System.out.println("嵌套语句在if...else中的使用"); } }else{ System.out.println("嵌套语句在if...else中的使用"); } /*三元运算符和if...else语句的区别, If--else语句与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以写在其他表达式中,而if----else语句则没有这种限制,但是可以写在其他方法中,不能写在表达式中*/ //求 a的绝对值和b的和 int a = 7 , b = 3 , sum ; if(a > 0){ System.out.println("您所求的两个数的和为:"+(a+b)); }else System.out.println("您所求的数的绝对值为:"+(-a+b)); sum = (a > 0 ? a : (-a))+b; System.out.println("您所求的两个数的和为:"+sum); } }
面试题:问下面一段代码是否会正常输出?
if(5 > 6) System.out.println("{}省略”); System.out.println("{}省略"); else{ System.out.println("{}省略时,"); }
答:不会,代码会出现错误,当代码判断条件语句不成立时,会自动跳过紧跟他的一条语句,这是它的作用范围,然后编译下一条代码,这时因为没有发现else,会将他认为是简单if语句,再往下执行时发现了else语句,这是编译会将其作为不合法代码跳出”错误:有’if’没有’else’”
注意事项: A.else if必须和if组合使用,else if语句末尾可以是一条单独的else语句
B.else不能有条件表达式
C.我们if语句第三种格式,任何一个条件表达式成立,if语句直接结束.
【例5.4】创建IfElseIfPractice类,进行对IfElseIf语句的特性进行一些验证
class IfElseIfPractice{ public static void main(String[] args){ if(false){ System.out.println("1"); }else if(false){ System.out.println("2"); }else if(true){//当发现if条件语句为true时,只执行这条语句,其他的就不再执行, System.out.println("3");//跳出这个if..else..if语句,执行其他程序 }else if(true){ System.out.println("4"); }else{ System.out.println("5"); } } }
【例5.5】学生考试成绩出来了请对其进行划分等级,要求90--100 A等80--89 B等70--79 C等60--69 D等60分以下 叫家长,谈人生
分析:我们初看到这道题目时,要注意这么几点
class GradePractice{ public static void main(String[] args){ int score = 178 ; if(score <= 100 && score >= 90){ System.out.println("您的成绩是:"+score+",相对应的成绩等级为:A等"); }else if(score < 90 && score >= 80){ System.out.println("您的成绩是:"+score+",相对应的成绩等级为:B等"); }else if(score < 80 && score >= 70){ System.out.println("您的成绩是:"+score+",相对应的成绩等级为:C等"); }else if(score < 70 && score >= 60){ System.out.println("您的成绩是:"+score+",相对应的成绩等级为:D等"); }else if(score >=0 && score < 60){ System.out.println("您的成绩是:"+score+",叫家长,谈人生!"); }else{ System.out.println("成绩输入错误请检查后重新输入!"); } } }
【例5.6】给出月份,判断它所处的季节3-5春季6-8夏季9-11秋季12-2冬季
分析:我们首先来看需求
方法一:一个个比较,使用简单if语句。
class SeasonPractice1{ public static void main(String[] args){ int month = 9 ; //声明一个代表月份的变量 if( month == 1){ System.out.println("这个月份属于冬季!"); } ...... if( month == 3){ System.out.println("这个月份属于春季!"); } ...... if( month == 6){ System.out.println("这个月份属于夏季!"); } ...... if( month == 9){ System.out.println("这个月份属于秋季!"); } ...... if( month == 12){ System.out.println("这个月份属于冬季!"); }else{ System.out.println("您输入的数据储存在问题,请检查后重新输入!"); } } }
方法2:使用逻辑运算符加上if语句。
class SeasonPractice2{ public static void main(String[] args){ int month = 2 ; if(month == 12 || month == 1 || month == 2){ System.out.println("这个月份属于冬季!"); //我们在这里使用if...else.if语句,需要明白语句的一个特性当有else.if语句为真时即跳出语句不再进行if.else语句,进行其他语句 }else if(month == 3 || month == 4 || month == 5){ System.out.println("这个月份属于冬季!"); }else if(month == 6 || month == 7 || month == 8){ System.out.println("这个月份属于冬季!"); }else if(month == 9 || month == 10 || month == 11){ System.out.println("这个月份属于冬季!"); }else { System.out.println("对不起,您输入的数据存在问题,请检查后重新输入!"); } } }
方法三:使用比较运算符,逻辑运算符和if语句;
class SeasonPractice3{ public static void main(String[] args){ int month = 17 ; if(month == 1 || month == 2 || month == 12){ System.out.println("这个月份属于冬季!"); }else if(month >= 3 && month <= 5){ System.out.println("这个月份属于春季!"); }else if(month >= 6 && month <= 8){ System.out.println("这个月份属于夏季!"); }else if(month >= 9 && month <= 11){ System.out.println("这个月份属于秋季!"); }else{ System.out.print("对不起,您输入的数据错误,请检查后重新输入!"); } } }
方法四:精简代码,从上面的三种方法我们可以看出代码的相同性有这么几点,(变量的判断比较,结果的输出,逻辑运算符的运用),我们将这相同的几点进行精简如下!
class SeasonLastPractice{ public static void main(String[] args){ int month = 7 ; String str ; if(month == 1 || month == 2 || month == 12){ str = "这个月份属于冬季!"; }else if(month >= 3 && month <= 5){ str = "这个月份属于春季!"; }else if(month >= 6 && month <= 8){ str = "这个月份属于夏季!"; }else if(month >= 9 && month <= 11){ str = "这个月份属于秋季!"; }else{ str = "对不起,您输入的数据错误,请检查后重新输入!"; } System.out.print(str); } }
【例5.7】比较三个数的大小(if语句的嵌套使用)
class ComparePractice{ public static void main(String[] args){ /*三个数的比较我们要考虑这些情况,当甲和乙比较后,我们还要考虑已和丙的比较等,所以我们这里就用到了嵌套语句*/ int a = 2 , b = 5 , c = 4 ; if(a > b){ if(b > c){ System.out.println("这三个数的大小为"+"a > b > c"); }else if(a > c){ System.out.println("这三个数的大小为"+"a > c > b"); }else{ System.out.println("这三个数的大小为"+"c > a > b"); } }else{ if(b > c){ if(a > c){ System.out.println("这三个数的大小为"+"b > a > c"); }else{ System.out.println("这三个数的大小为"+"b > c > a"); } } } } }
【例5.8】求三个数中的最大值;
class MaxPractice{ public static void main(String[] args){ int a = 2 , b = 8 , c = 6 , max = 0; //如果只是求最大值,那么我们只用拿出大的那个值同最后一个值比较 if(a > b){ if(a > c){ max = a ; }else{ max = c ; } }else{ if(b > c){ max = b ; }else{ max = c ; } } System.out.print("三个数的最大值为:"+max); } }