语句结构
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:顺序结构、分支结构和循环结构,如下图所示:
顺序语句: 按照正常的语句顺序从上往下执行。
分支语句: 根据某种条件选择执行。
循环语句: 根据某种条件反复执行。
分支语句
分支语句的分类:
1.单if语句
2.If-else语句
3.多重if语句
4.嵌套if语句
5.switch语句
一、单if语句
引入
需求: 小明考试成绩60分以上奖励电脑
我们可以使用三目运算符实现,但是三目运算符的Y和Z表达式只能够书写一条语句,所以不能够满足我们开发的一些复杂需求,所以可以使用选择语句
格式
if(条件表达式) {
语句体;
}
注意事项
1.条件表达式的结果必须是boolean类型,一般都是关系表达式或者逻辑运算符连接多个关系表达式
2.语句体中可以有一条语句也可以有多条语句,如果语句体中只有一条语句,那么{}可以省略不写,但是建议写上,提高可读性
3.能够使用三目运算符改进的选择语句,尽量使用三目改进,如果改进不了才使用选择语句
4.if(score >= 60);{} 表示无论条件是否成立,都会执行与语句体,因为if和;构成了选择语句
应用场景
针对条件单一的情况使用单if语句
代码实例
public class IfDemo01 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入成绩: ");
double score = input.nextDouble();
if(score >= 60);{
System.out.println("奖励电脑");
}
}
}
二、if-else语句
引入
需求: 小明考试成绩60分以上奖励手机,否则奖励电脑
格式
if(条件表达式) {
语句体1;
} else {
语句体2;
}
执行流程
1.首先执行条件表达式
2.判断条件表达式是否成立
成立
执行语句体1
不成立
执行语句体2
注意事项
1.条件表达式的结果必须是boolean类型,一般都是关系表达式或者逻辑运算符连接多个关系表达式
2.语句体中可以有一条语句也可以有多条语句,如果语句体中只有一条语句,那么{}可以省略不写,但是建议写上,提高可读性
3.能够使用三目运算符改进的选择语句,尽量使用三目改进,如果改进不了才使用选择语句
应用场景
针对两种情况的时候使用
代码实例
public class IfDemo02 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入成绩: ");
double score = input.nextDouble();
// System.out.println((score >= 60) ? "奖励手机" : "奖励电脑");
if (score >= 60)
System.out.println("奖励手机");
else
System.out.println("奖励电脑");
}
}
三、多重if语句
引入
需求: 老师批改试卷,成绩在90分以上的为优秀,成绩在80-90的为良好,成绩在60-80的为及格,60以下的为差,该怎么实现呢?
格式
if(条件表达式1) {
语句体1;
} else if(条件表达式2) {
语句体2;
} else if(条件表达式3) {
语句体3;
} …(条件表达式n) {
语句体n;
} else {
语句体n+1;
}
执行流程
1.首先判断条件表达式1是否成立
成立
执行语句体1;
不成立 a<=30 || a>=40
继续判断条件表达式2 是否成立
成立
执行语句体2
不成立
继续判断…
2.如果全部都不成立,那么就执行else语句
注意事项
1.所有的条件表达式的结果必须是boolean类型,一般都是 关系表达式或者逻辑运算符连接多个关系表达式
2.语句体中可以有一条语句也可以有多条语句,如果语句体中只有一条语句,那么{}可以省略不写,但是建议写上,提高可读性
3.多重if语句不能够使用三目运算符改进
4.score > 100 || score < 0的不成立条件是score <= 100 && score >= 0,也就是逻辑&&的反条件是逻辑||
5.无论你书写多少个条件,只有一个条件中的语句体被执行
6.else if语句可以书写1~n个,但是if语句和else语句只能够有一个,并且else语句有的时候可以省略不写,但建议写上
应用场景
针对多个条件的情况,并且常用于区间判断
代码示例
public class IfDemo03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入成绩: ");
double score = input.nextDouble();
if (score > 100 || score < 0) {
System.out.println("您输入的成绩无效!");
} else if (score >= 90 && score <= 100) {
System.out.println("优秀");
} else if (score >= 80 && score < 90) {
System.out.println("良好");
} else if (score >= 60 && score < 80) {
System.out.println("及格");
} else {
System.out.println("差");
}
}
}
四、嵌套if语句
引入
需求: 学校举行运动会,百米赛跑跑入10秒内的学生有资格进决赛,根据性别分别进入男子组和女子组
格式
本质上并没有真正意义上的嵌套if语句,只不过是前三种if语句格式综合起来的一种,没有固定格式,如下所示:
if() {
if() {}
else if() {}
else {
if() {} else {}
}
} else {
if() {}
}
应用场景
针对多种条件多种情况的场景
注意事项
1.== 只能够比较基本数据类型是否相等,String是引用类型,所以不能够比较,这里暂时使用equals方法来比较字符串是否相等
2.嵌套语句一般会降低程序的可读性,所以慎用,能用三目就用三目
代码示例
public class IfDemo04 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入跑步成绩: ");
double score = input.nextDouble();
System.out.print("请输入性别: ");
String gender = input.next();
if (score < 10) {
if (gender.equals("男")) {
System.out.println("恭喜进入男子组决赛");
} else if (gender.equals("女")) {
System.out.println("恭喜进入女子组决赛");
} else {
System.out.println("恭喜进入人妖组一决雌雄!!!");
}
} else {
System.out.println("回去多跑一会,明年再来!!!");
if (gender.equals("女")) {
System.out.println("别走,送你一双运动鞋,谢谢参与");
}
}
}
}
五、switch语句
引入
需求: 电话呼叫案例,欢迎致电中国电信,查询服务请按1,宽带业务咨询办理请按2,手机业务咨询办理请按3,障碍报修请按4,投诉业务请按5,转人工服务请按6,充值缴费请按7,政府及企业客户请按8,无需帮助请按请按0,控制台输入对应的数字显示对应的服务。输入有误显示“对不起您的输入有误”
格式
switch (表达式) {
case value1:
break;
case value2:
break;
default:
break;
}
注意事项
1.表达式可以是变量也可以是常量,也可以是一个复杂表达式
表达式的取值范围 byte short char int String 枚举
在JDK7以后可使用String类型
在JDK5以后可以使用枚举类型
其实这里之所以可以使用 byte short char 是因为底层在参与运算的时候会转换成 int类型来处理
2.case子句必须是常量表达式,case子句可以有多个,但是每一个case子句的取值不能够重复
3.default子句类似于if语句的else语句,可以省略的,但是不建议,一般用来处理一种其他的情况,可以出现在switch语句中的任意位置,但是一般建议写在最后面。
4.break子句表示退出switch语句体,break语句也可以省略,一旦省略会出现break穿透现象,一般不会省略break子句
5.break穿透现象: 会依次往下执行case子句,直到碰到switch的右大括号
多重if语句和switch语句的区别
1.if语句条件表达式只能够是boolean类型, switch语句不可以是boolean类型,必须是byte short int char String 枚举其中之一。
2.switch语句常用于等值判断,而多重if语句常用语区间判断
3.能够使用switch语句的情况就一定可以使用多重if改进,反之不成立
应用场景
switch语句常用于等值判断
代码示例
public class SwitchDemo01 {
public static void main(String[] args) {
System.out.println(
"欢迎致电中国电信,查询服务请按1,宽带业务咨询办理请按2,手机业务咨询办理请按3,障碍报修请按4,投诉业务请按5,转人工服务请按6,充值缴费请按7,政府及企业客户请按8,无需帮助请按请按0,控制台输入对应的数字显示对应的服务。");
Scanner input = new Scanner(System.in);
System.out.print("请输入服务编号: ");
int choice = input.nextInt();
switch (choice) {
case 1:
System.out.println("查询服务");
break;
case 2:
System.out.println("宽带业务咨询办理");
break;
default:
System.out.println("default子句");
break;
case 3:
System.out.println("手机业务咨询办理");
break;
case 4:
System.out.println("障碍报修");
break;
case 5:
System.out.println("投诉业务");
break;
}
}
}
五种选择语句的选取
单if语句: 针对一种情况的时候
if-else语句: 针对两种情况的时候
多重if语句: 针对多种情况的时候,常用于区间判断
嵌套if语句: 针对多种条件的时候
swtich语句: 针对条件是等值的情况