二、流程控制语句
1、 什么是流程控制语句
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能
2、 流程控制语句的分类
顺序结构、选择结构、循环结构
3、 顺序结构
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。总的来说:写在前面的先执行,写在后面的后执行
执行流程:从上往下,依次执行。
4、选择结构
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
# if语句:也被称为分支结构。
## if语句的三种格式
格式1:if(比较表达式或者是boolean类型的值) {
语句体;
}
注意事项:
a:比较表达式无论简单还是复杂,结果必须是boolean类型
b:if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
c:一般来说:有左大括号就没有分号,有分号就没有左大括号
执行流程:
先计算比较表达式的值,看其返回值是true还是false。
如果是true,就执行语句体;
如果是false,就不执行语句体;
格式2:if(比较表达式) {
语句体1;
}else {
语句体2;
}
注意事项:else后面是没有比较表达式的,只有if后面有。
执行流程:
首先计算比较表达式的值,看其返回值是true还是false。
如果是true,就执行语句体1;
如果是false,就执行语句体2;
格式3:if(比较表达式1) {
语句体1;
}else if(比较表达式2) {
语句体2;
}else if(比较表达式3) {
语句体3;
}
...
else {
语句体n+1;
}
执行流程:
首先计算比较表达式1看其返回值是true还是false,
如果是true,就执行语句体1,if语句结束。
如果是false,接着计算比较表达式2看其返回值是true还是false,
如果是true,就执行语句体2,if语句结束。
如果是false,接着计算比较表达式3看其返回值是true还是false,
...
如果都是false,就执行语句体n+1。
注意事项: 当只要有一个条件满足时,if语句结束。else是可以省略,但是不建议省略。
/* 90-100 A等。
80-89 B等。
70-79 C等。
60-69 D等。
60以下 E等。*/
import java.util.Scanner;
public class text2 {
public static void main(String[] args) {
System.out.println("please input the score:");
Scanner sc=new Scanner(System.in);
float score=sc.nextFloat();
if(90<=score&&score<=100){
System.out.println("A等");
}else if(80<=score&&score<90){
System.out.println("B等");
}else if(80<=score&&score<90){
System.out.println("B等");
}else if(70<=score&&score<80){
System.out.println("C等");
}else if(60<=score&&score<70){
System.out.println("D等");
}else if(0<=score&&score<60){
System.out.println("E等");
}else{
System.out.println("输入的成绩不合法,请重新输入");
}
}
}
# switch语句
(1)switch语句的格式
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
....
default:
语句体n+1;
break;
}
(2) switch语句的格式解释
a: switch表示这是switch语句
表达式的取值:byte,short,int,char
JDK5以后可以是枚举(什么是枚举,以后再讲)
JDK7以后可以是String
b: case后面跟的是要和表达式进行比较的值
c: 语句体部分可以是一条或多条语句
d: break表示中断,结束的意思,可以结束switch语句
e: default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似
a:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同
b:default可以省略吗?
可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
c:break可以省略吗?
可以省略,但是结果可能不是我们想要的。会出现一个现象:case穿透。 最终我们建议不要省略
d:default一定要在最后吗?
不是,可以在任意位置。但是建议在最后。
e:switch语句的结束条件
* 遇到break就结束了
* 执行到末尾就结束了
(4)案例演示
//需求:键盘录入一个成绩,判断并输出成绩的等级。
/* 90-100 A等。
80-89 B等。
70-79 C等。
60-69 D等。
60以下 E等。*/
程序源代码:
import java.util.Scanner;
public class text2 {
public static void main(String[] args) {
System.out.println("please input the score:");
Scanner sc=new Scanner(System.in);
float score=sc.nextFloat();
int temp=(int)(score/10);
switch(temp){
case 10:
case 9:
System.out.println("A等");
break;
case 8:
System.out.println("B等");
break;
case 7:
System.out.println("C等");
break;
case 6:
System.out.println("D等");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
System.out.println("E等");
break;
default:
System.out.println("输入的成绩不合法,请重新输入");
break;
}
}
}
if语句使用场景:
针对结果是boolean类型的判断
针对一个范围的判断
针对几个常量值的判断
switch语句使用场景:
针对几个常量值的判断
5、循环语句
# 什么是循环结构
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环
# 循环结构的分类
for循环
while循环
# for循环
(1)循环结构for语句的格式:
for(初始化表达式语句;判断条件语句;控制条件语句) {
循环体语句;
}
(2)执行流程:
a:执行初始化表达式语句
b:执行判断条件语句,看其返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环
c:执行循环体语句;
d:执行控制条件语句
e:回到B继续。
(3)注意事项:
初始化表达式语句只执行一次
# while循环
(1)循环结构while语句的格式:
while(判断条件语句) {
循环体语句;
}
完整格式:
初始化条件语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
(2)执行流程:
a: 执行初始化条件语句;
b: 执行判断条件语句,看其返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环
c: 执行循环体语句;
d: 执行控制条件语句
e: 回到b继续。
# do while循环
(1) 循环结构do...while语句的格式:
do {
循环体语句;
}while(判断条件语句);
完整格式;
初始化条件语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
(2)执行流程:
a: 执行初始化条件语句;
b: 执行循环体语句;
c: 执行控制条件语句;
d: 执行判断条件语句,看其返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环
e: 回到b继续。
# 三种循环语句的区别: do...while循环至少执行一次循环体。而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
6、控制跳转语句
# 什么是控制跳转语句
前面我们已经说过了,Java中的goto是保留字,目前不能使用。虽然没有goto语句可以增强程序的安全性,但是也带来很多不便,比如说,我想在某个循环执行到某一步的时候就结束,现在就做不了这件事情。为了弥补这个缺陷,Java就提供了break,continue和return来实现控制语句的跳转和中断。
# 控制跳转语句的分类
break 中断
continue 继续
return 返回
# break语句
(1)break的使用场景
在选择结构switch语句中
在循环语句中
注意:离开使用场景的存在是没有意义的
(2)作用
a: 退出单层循环
b: 退出多层循环(几乎不使用)
要想实现这个效果,就必须知道一个东西;带标签的语句;
格式:标签名:语句
# continue语句
(1)continue的使用场景
a: 在循环语句中
b: 离开使用场景的存在是没有意义的
(2)作用
a: 跳出一次循环,执行下一步操作
# return语句
return的作用:
return 就是退出一个方法。
跳转到上层调用的方法。这个在方法的使用那里会在详细的讲解