前言
if 、if...else(双条件选择)、在我们的开发当中会经常使用选择结构,但是具体的意思和作用是怎么样的,接下来我们就具体的了解它们的作用和用法了。
1、选择结构
概念:
选择结构就是让程序有选择的执行,满足条件就执行,不满足就不执行。根据判断的结果来控制程序的流程,是属于流程控制语句。其它两个流程控制语句是顺序结构(程序的执行是从左到右,从上到下)、循环结构(程序重复的干一件事)。
作用:
让程序有选择的执行。例如:用户登录的时候,只有用户名和密码都输入正确才能登录成功等。
1.1、if选择结构
1. if单条件语句
基本语法:
if(判断条件) {
语句;
}
判断条件: 布尔类型的值或者表达式
执行语句:当条件满足时执行语句(可以是一条语句,也可以是一组语句)
代码案例:
public class _01If {
public static void main(String[] args) {
// 需求1:需要让智能机器人自动充电,充电条件电量低于10
// 声明一个int类型的变量power表示电量,赋值9。
int power = 9;
if (power < 10) { // if条件判断,电量power < 10
// 用一个打印语句表示,打印:主人,我没电了,请给我充电!
System.out.println("主人,我没电了,请给我充电!");
}
}
}
2. if ...else双条件语句
基本语法:
if(判断条件) {
if语句;
} else {
else语句;
}
判断条件: 布尔类型的值或者表达式
执行语句:当条件满足时执行 if 中的语句,不满足则执行 else 中的语句
代码案例:
public class _02If {
public static void main(String[] args) {
// 需求2:智能机器人在充电条件电量低于10的时候,自动充电。不小于10,则提醒主人,一起玩耍!
// 声明一个int类型的变量power2表示电量,赋值11。
int power2 = 11;
if (power2 < 10) {// if条件判断,电量power2 < 10
// 用一个打印语句表示,打印:主人,我没电了,请给我充电!
System.out.println("主人,我没电了,请给我充电!");
} else {// else表示power 不小于 10
// 用一个打印语句表示,打印:主人,我们一起耍一下!
System.out.println("主人,我们一起耍一下!");
}
}
}
3. if...else if 多条件语句
基本语法:
if(判断条件1) {
语句1;
} else if(判断条件2) {
语句2;
} else if(判断条件3) {
语句3;
} ...
else {
else语句
}
判断条件: 布尔类型的值或者表达式
执行语句:按照从上到下顺序匹配条件,如果满足条件1,就执行语句1;如果满足条件2,就执行语句2;如果满足条件3,就执行语句3;
注意:只会执行一个满足的条件,哪怕下面有其它的满足条件的也不会执行了。所有条件都不满足就执行else语句中代码。
代码案例:
public class _03If {
public static void main(String[] args) {
/*
* 需求3:智能机器人在充电条件电量低于10的时候,自动充电。
* power >= 10 并且< 60 提醒主人,一起看电视!
* power >= 60 并且< 80 提醒主人,实践检验一下!
* power >= 80 并且<= 100 提醒主人,我们来一点激烈的运动!
*/
// 声明一个int类型的变量power3表示电量,赋值69。
int power3 = 69;
if (power3 >= 0 &&power3 < 10) { // if条件判断,电量power3 < 10
// 用一个打印语句表示,打印:主人,我被玩没电了,请插我充电!
System.out.println("主人,我被玩没电了,请插我充电!");
} else if(power3 >= 10 && power3 < 60) { // 判断条件:power3 >= 10 && power3 < 60
// 用一个打印语句表示,打印:主人,一起看片,陶冶情操!
System.out.println("主人,一起看电视!");
} else if(power3 >= 60 && power3 < 80) { // 判断条件:power3 >= 60 && power3 < 80
// 用一个打印语句表示,打印:主人,实践检验一下!
System.out.println("主人,实践检验一下!");
} else if(power3 >= 80 && power3 <= 100) { // 判断条件:power3 >= 80 && power3 <= 100
// 用一个打印语句表示,打印:主人,我们来一点激烈的运动!
System.out.println("主人,我们来一点激烈的运动!");
} else { // 所有条件都不满足会执行else
// 用一个打印语句表示,打印:主人,我坏了!
System.out.println("主人,我坏了!");
}
}
}
注意事项:
1. 选择结构是从上到下开始匹配,一旦匹配上一个条件后,整个条件语句就结束了,
哪怕后面也能匹配上条件也不会执行了 。
2. if 和 if else 语句,后面可以不写{},但是不建议,因为不写{} ,只能控制一行代码。
3. if(){} else if(){}后可以不写 else,一般根据业务需求决定。
代码案例:
public class _04If {
public static void main(String[] args) {
/*
* 1. 选择结构是从上到下开始匹配,一旦匹配上一个条件后,整个条件语句就结束了,
* 哪怕后面也能匹配上条件也不会执行了
*/
if (true) {
System.out.println("if");
} else if (true) {
System.out.println("else if - 1");
} else if (true) {
System.out.println("else if - 2");
}
/*
* 2. if 和 if else 语句,后面可以不写{},但是不建议
* 因为不写{} ,只能控制一行代码
*/
if (false) // 只能控制一行代码
System.out.println("if true");
System.out.println("if true 后语句");
if (false) // 只能控制一行代码,并且if后不能再写其他代码,否则语法报错
System.out.println("if true");
// System.out.println("if true"); // 破坏了if else结构,报错
else // 只能控制一行代码
System.out.println("if true 后语句");
}
}
1.2、swtich 选择结构
大家先一起来看一个需求:
public class _01Switch {
public static void main(String[] args) {
/*
* 请设计一个一周工作计划
* 周一: 好好学习
* 周二:看视频学习
* 周三: 实践学习
* 周四: 吃药补补身体!
* 周五: 爬山锻炼身体!
* 周六: 休息,给身体放个假
* 周日:总结一周所得!
*/
// 声明一个int类型变量weekDay,表示一周中的某一天。赋值4
int weekDay = 4;
if (weekDay == 1) {// 判断weekDay是否==1
System.out.println("周一: 好好学习");
} else if (weekDay == 2) {// 判断weekDay是否==2
System.out.println("周二:看视频学习");
} else if (weekDay == 3) {// 判断weekDay是否==3
System.out.println("周三: 实践学习");
} else if (weekDay == 4) {// 判断weekDay是否==4
System.out.println("周四: 吃药补补身体!");
} else if (weekDay == 5) {// 判断weekDay是否==5
System.out.println("周五: 爬山锻炼身体!");
} else if (weekDay == 6) {// 判断weekDay是否==6
System.out.println("周六: 休息,给身体放个假");
} else if (weekDay == 7) {// 判断weekDay是否==7
System.out.println("周日:总结一周所得!");
} else {
System.out.println("出错了!");
}
}
}
上面的需求我们可以根据学过的if结构实现,但是大家可以发现一个问题,现在上面的判断条件都是一些固定的值,并且代码可读性很差,我们有没有什么方式可以优化一下代码呢?
用switch结构
1.switch基本语法
声明变量 switch(变量){ case 值1: 功能语句1 功能语句2... break; case 值2: 功能语句1 功能语句2... break; case 值3: 功能语句1 功能语句2... break; default:// 相当于条件语句中else,所有的case匹配不上执行default default语句 break; } |
变量 :可以是局部变量或常量
switch中变量支持的数据类型:
byte/ short / int / char / String(JDK1.7) / 枚举类型(JDK1.5)
2.执行流程:
2.注意事项:
1. 每个case之间顺序可以交换,不影响代码运行。
2. default不一定放在末尾 在所有case失效的时候就会被执行到。
3. case中值与 key类型必须一致。
4. 最后一个break可以省略,但不建议。
5. break可以省略,但会导致后续case条件判断失效,按照从上到下顺序执行,直到找到第一个break跳出switch结构,如果没有找则执行到末尾后结束switch结构。
3、if、switch使用场景
只有比较固定的情况下,使用switch结构,其他情况一律用 if 语句。
switch不适应区间条件,只适用于一些条件比较固定的场景。例如:vip、星座、QQ状态、月份、礼拜、生肖、季节...
下一章《循环结构》