概述
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。
分类
顺序结构
选择结构
循环结构
下面分别说一下每个结构
顺序结构
- 概述
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。 - 总的来说:写在前面的先执行,写在后面的后执行
- 顺序结构图
public class Demo01 {
public static void main(String[] args) {
System.out.println("开始");
System.out.println("语句A");
System.out.println("语句B");
System.out.println("语句C");
System.out.println("结束");
}
}
选择结构
概述
选择结构也被称为分支结构。
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码Java语言提供了两种选择结构语句
if语句
switch语句
选择结构if
if语句有三种格式
if语句第一种格式:
if(关系表达式) {
语句体
}执行流程
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体流程图
``` public class Demo01If { public static void main(String[] args) { System.out.println("开始"); // 定义两个变量 int a = 10; int b = 20; if (a == b) { System.out.println("a等于b"); } int c = 10; if (a == c) { System.out.println("a等于c"); } System.out.println("结束"); } } ```
if语句第二种格式:
if(关系表达式) {
语句体1;
}else {
语句体2;
}执行流程
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
流程图
public class Demo02If { public static void main(String[] args) { System.out.println("开始"); // 判断给定的数据是奇数还是偶数 // 定义变量 int a = 100; // 给a重新赋值 a = 99; if (a % 2 == 0) { System.out.println("a是偶数"); } else { System.out.println("a是奇数"); } System.out.println("结束"); } }
if语句第三种格式:
if (判断条件1) {
执行语句1
} else if (判断条件2) {
执行语句2
}
…
else if (判断条件n) {
执行语句n
} else {
执行语句n+1
}执行流程
首先判断关系表达式1看其结果是true还是false
如果是true就执行语句体1
如果是false就继续判断关系表达式2看其结果是true还是false
如果是true就执行语句体2
如果是false就继续判断关系表达式…看其结果是true还是false
…
如果没有任何关系表达式为true,就执行语句体n+1。流程图
例:
x和y的关系满足如下:
x>=3 y = 2x + 1;
-1<=x<3 y = 2x;
x<-1 y = 2x – 1;
根据给定的x的值,计算出y的值并输出。public class Demo03If { public static void main(String[] args) { // x和y的关系满足如下: // x>=3 y = 2x + 1; // -1<=x<3 y = 2x; // x<=-1 y = 2x – 1; // 根据给定的x的值,计算出y的值并输出。 // 定义变量 int x = 5; /* int y; if (x >= 3) { y = 2 * x + 1; } else if (x >= -1 && x < 3) { y = 2 * x; } else if (x < -1) { y = 2 * x - 1; }else { y = 0; } */ /*int y = 0; if (x >= 3) { y = 2 * x + 1; } else if (x >= -1 && x < 3) { y = 2 * x; } else if (x < -1) { y = 2 * x - 1; }*/ int y; if (x >= 3) { y = 2 * x + 1; } else if (x >= -1 && x < 3) { y = 2 * x; } else { y = 2 * x - 1; } System.out.println("y的值是:"+y); } }
总结
第一种格式适合做一种情况的判断
第二种格式适合做二种情况的判断
第三种格式适合做多种情况的判断
选择结构switch
格式
switch(表达式) {
case 目标值1:
语句体1;
break;
case 目标值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}格式解释
switch表示这是switch语句
表达式的取值:byte,short,int,char
JDK5以后可以是枚举(今后会讲)
JDK7以后可以是String(面向对象讲解)
case后面跟的是要和表达式进行比较的值
语句体部分可以是一条或多条语句
break表示中断,结束的意思,可以结束switch语句
default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。执行流程
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。流程图
循环结构
概述
循环有一个开始条件
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。循环语句的组成
循环变量初始化 (初始化表达式):一条或者多条语句,这些语句完成一些初始化操作。
循环出口(布尔表达式):这是一个boolean 表达式,这个表达式能决定是否执行循环体。
循环逻辑内容(循环体):这个部分是循环体语句,也就是我们要多次做的事情。
循环增量(步进表达式):这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。循环结构for
格式
for(初始化表达式①;布尔表达式②;步进表达式④){
循环体③
}执行流程
执行顺序: ①②③④>②③④>②③④… ②不满足为止。
①负责完成循环变量初始化
②负责判断是否满足循环条件,不满足则跳出循环
③具体执行的语句
④循环后,循环条件所涉及变量的变化情况流程图
循环结构while
格式基本格式
while(布尔表达式) {
循环体语句;
}扩展格式
初始化表达式①
while(布尔表达式②){
循环体③
步进表达式④
}
执行流程
执行顺序: ①②③④>②③④>②③④… ②不满足为止。
①负责完成循环变量初始化。
②负责判断是否满足循环条件,不满足则跳出循环。
③具体执行的语句。
④循环后,循环变量的变化情况。流程图
循环结构dowhile
格式基本格式
do {
循环体语句;
}while(布尔表达式);扩展格式
初始化表达式①
do{
循环体③
步进表达式④
}while(布尔表达式②);
执行流程
执行顺序: ①③④>②③④>②③④… ②不满足为止。
①负责完成循环变量初始化。
②负责判断是否满足循环条件,不满足则跳出循环。
③具体执行的语句
④循环后,循环变量的变化情况流程图
跳转控制语句
概述
想让循环在某一步的时候结束或者跳过某些数据不要这些数据,现在就做不了这件事情。为了弥补这个缺陷,Java就提供了break,continue来实现控制语句的中断和跳转。
break 中断
continue 继续
Break
- break的使用场景:
在选择结构switch语句中
在循环语句中
离开使用场景的存在是没有意义的 - break的作用:
跳出单层循环
public class Demo01Break { public static void main(String[] args) { //离开使用场景没有意义 //break;//break cannot be used outside of a loop or a switch for (int i = 1; i <=10; i++) { //需求:打印完两次HelloWorld之后结束循环 if(i == 3){ break; } System.out.println("HelloWorld"+i); } } }
- break的使用场景:
Continue
- continue的使用场景:
- 在循环语句中
- 离开使用场景的存在是没有意义的
- continue的作用:
单层循环对比break,然后总结两个的区别
break 结束当前循环
continue 结束本次循环,继续下一次循环
public class Demo02Continue { public static void main(String[] args) { //离开使用场景没有意义 //continue;//离开使用场景没有意义 for (int i = 1; i <=10; i++) { //需求:不打印第三次HelloWorld if(i == 3){ continue; } System.out.println("HelloWorld"+i); } } }
- continue的使用场景: