if语句
一、if语句的语法结构和运行原理
if语句是分支语句,也可以叫做条件语句。
第一种写法:
if(布尔表达式){
java语句;//分支
}
这里的大括号{}叫做一个分支。
该语法的执行原理:
如果布尔表达式的结果为true,执行大括号中的程序,否则大括号中的代码不执行。
注意:
(布尔表达式)中的布尔表达式必须得是布尔类型,例如不能为a=b,这种是赋值,"=="是关系运算符,才是表示等于。
关系运算符:>,>=,<,<=,!=,== 运算出来的结果都是布尔值。true or false。
第二种写法:
if(布尔表达式){ //分支1
java语句1;
}else{ //分支2
java语句2;
}
执行原理:
如果布尔表达式的结果为true,则执行分支1,分支2不执行;如果结果为false,分支1不执行,分支2执行。
以上这个语句可以保证一定会有一个分支执行!
第三种写法:
if(布尔表达式1){ //分支1
java语句1;
}else if(布尔表达式2){ //分支2
java语句2;
}
else if(布尔表达式3){ //分支3
java语句3;
}
…
执行原理:
先判断布尔表达式1,如果布尔表达式1结果为true,则执行分支1,其他分支不执行,整个if语句结束。
如果布尔表达式1结果为false的时候,继续判断布尔表达式2的结果,如果布尔表达式2的结果为true,则执行分支2,其他分支不执行,包括分支1,整个if语句结束。
……
从上往下依次判断,主要看第一个true发生在哪个分支上。第一个true对应的分支执行,if语句结束。
第四种写法:
if(布尔表达式1){ //分支1
java语句1;
}else if(布尔表达式2){ //分支2
java语句2;
}
else if(布尔表达式3){ //分支3
java语句3;
}else{
java语句4;//以上条件没有一个成立的,则执行这个else。
}
注意:
-
对于if语句来说,在任何情况下只能有一个分支执行,不可能存在2个或者更多分支同时执行。if语句只要有一个分支执行了,整个if语句结束。(if语句里嵌套一个if语句,这两个if语句是相对独立的。)
-
以上四种语法机制中,凡是带有else分支的,一定可以保证会有一个分支执行,以上四种当中,第一种和第三种没有else分支,这样的语句可能会导致最后一个语句都不执行。第二种和第四种,一定会有一个分支执行。
-
大括号中当分支语句中,java语句大括号可以省略,为了代码可读性,一般不省略。
-
控制语句与控制语句间可以嵌套,嵌套时,一个一个语句的分析,不要所有语句一起冗杂分析。
二、if语句的嵌套
if( ){
if( ){
分析的时候将里面的if语句看成一个java语句,只有外面if语句执行了,才会执行里面的if语句。
无论if语句里面嵌套了什么控制语句,都一个一个的来分析。
}
}
案例一:
public class IfTest(){ public static void main(String[] args){ //定义了一个布尔类型的表量,表示性别。 boolean sex = true; //当sex为true时表示男,为false时,表示女。 if( sex ){ //这里的sex已经是布尔类型了,写sex == true,代码也执行无误,但是多此一举。 System.out.println("男"); }else{ System.out.println("女"); } //也可以直接用三目运算符 // sex = false; //System.out.println(sex ? "男":"女"); //看看代码是否可以这样写? //小括号中最终取的是sex的值。 if(sex = true){ System.out.println("男"); }else{ System.out.println("女"); } /*这段代码也可以成功运行,但是只会运行if语句里的代码,else已经没有存在意义,原因是在if语句里"="表示赋值,在此时已 经将sex的值赋值为 true了。就算在if语句前定义 sex = false; 也不会更改结果*/ } }
案例二
业务要求:
-
从键盘上接收一个人的年龄。
-
年龄要求为0-150,其他值表示非法,需要提示非法信息。
-
根据人的年龄来动态地判断这个人属于生命的哪个阶段?
【0-5】婴幼儿
【6-10】少儿
【11-18】少年
【19-35】青年
【36-55】中年
【56-150】老年
package com.cooler.Base; import java.util.Scanner;//导入Scanner类 public class IfTest01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in);//接收一个年龄 System.out.println("请输入年龄:"); int age = sc.nextInt(); //定义一个变量存放键盘输入的值。 if (age < 0 || age > 150) { System.out.println("非法输入,请重新输入!"); } else { /*能够走到这个分支当中,说明年龄合法! 可以进一步使用嵌套。 if(age <= 5 && age >= 0){}相对来说比较啰嗦。 */ if (age <= 5) { System.out.println("婴幼儿"); } else if (age <= 10) { System.out.println("少儿"); } else if (age <= 18) { System.out.println("少年"); } else if (age <= 35) { System.out.println("青年"); } else if (age <= 55) { System.out.println("中年"); } else { System.out.println("老年"); } } } }
也可以采用不嵌套的方式。
package com.cooler.Base; import java.util.Scanner; public class IfTest01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入年龄:"); int age = sc.nextInt(); if (age < 0 || age > 150) { System.out.println("非法输入,请重新输入!"); } else if (age <= 5) { System.out.println("婴幼儿"); } else if (age <= 10) { System.out.println("少儿"); } else if (age <= 18) { System.out.println("少年"); } else if (age <= 35) { System.out.println("青年"); } else if (age <= 55) { System.out.println("中年"); } else { System.out.println("老年"); } } }
改良一下:
package com.cooler.Base; import java.util.Scanner; public class IfTest01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入年龄:"); int age = sc.nextInt(); String str = "老年";//定义一个字符串为老年。 if (age < 0 || age > 150) { System.out.println("非法输入,请重新输入!"); } else if (age <= 5) { str = "婴幼儿"; } else if (age <= 10) { str = "少儿"; } else if (age <= 18) { str = "少年"; } else if (age <= 35) { str = "青年"; } else if (age <= 55) { str = "中年"; } System.out.println(str); } }
-