在程序中,程序运行的流程控制决定程序是如何执行的,需要掌握,主要有三大流程控制语句
1.顺序控制
2.分支控制
3.循环控制
程序从上到下一行一行的执行,中间没有任何跳转和判断
Java中定义变量时采用合法的前向引用。
public class Test{
int num1 =12;
int num2 = num +2;
}
让程序有选择的执行,分支控制有三种
1.单分支
2.双分支
3.多分支
基本语法:
if(条件表达式){
执行代码块;(可以有多条语句)
}
说明:当条件表达式为true时,就会执行{}的代码。如果为false,就不执行
特别说明,如果{}中只有一条语句,则可以不用{},建议写上{}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NbU2RcX7-1619437823364)(images\image-20210424174731507.png)]
流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q1GWRrjE-1619437823365)(images\image-20210424174425792.png)]
基本语法
if(条件表达式){
执行代码块1
}
else{
执行代码块2
}
说明:当条件表达式成立,则执行代码块1,否则执行代码块2,如果执行
代码块 只有一条语句 则{}可以省略,否则不能省略
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LxPrb65w-1619437823366)(images\image-20210424175357153.png)]
流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q3ynjjce-1619437823368)(images\image-20210424175556266.png)]
基本语法
if(条件表达式){执行代码块1}
else if(条件表达式){执行代码块2}
…
else{执行代码块n}
特别说明:(1)多分支可以没有else
多分支的流程图
说明:
1.当条件表达式1成立时,及执行代码块1
2.如果表达式1不成立时,才去判断表达式二是否成立
3.如果表达式2成立,就执行代码块2
4.一次类推,如果所有的表达式都不成立
5.则执行else的代码块,注意只能有一个执行入口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IA1MUq3p-1619437823369)(images\image-20210425094805226.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-osxsmxsX-1619437823369)(images\image-20210425102622531.png)]
**基本介绍:**在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为
内层分支外面的分支结构称为外层分支。规范:不要超过三层(可读性不好)
if(){
if(){
//if-else…
}else{
//if-else
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EbBWhFfj-1619437823370)(images\image-20210425140021300.png)]
switch(表达式){
case 常量1:
语句块1;
break;
case 常量2:
语句块2;
break;
…
case 常量n:
语句块n;
break;
default:
default语句块;
break;
}
1.switch关键字,表示switch分支
2.表达式对应一个值
3.case常量1;当表达式的值等于常量1,就执行语句块1
4.break:表示退出switch
5.如果和case常量1匹配,就执行语句块1,如果没有匹配就继续匹配case
常量2
6.如果一个都没有匹配上,执行default
流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5ophnwIg-1619437823370)(images\image-20210425141935757.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MequLdsk-1619437823371)(images\image-20210425143259517.png)]
1.表达式数据类型,应和case后的常量类型一致,或者是可以自动转换成可以
相互比较的类型,比如输入的字符串,而常量是int
2.switch(表达式)中表达式的返回值必须是(byte,int,int,char,enum,String,short)
3.case子句中的值是可选的,当没有匹配的case时,执行default
5.break语句用来在执行完一个case分支后使程序跳出switch语句块,如果没写break,程序
一直执行到switch结尾。
1.如果判断的数值不多,而且符合bytte,short,int,char,enum[枚举],String
这六种数据类型,虽然两个语句都可以使用,建议使用switch语句
2.其他情况:对区间判断,对结果为boolean类型判断,使用if,if的
使用范围更广
for(循环变量初始化;循环条件;循环变量迭代){
循环操作(可以多条语句);
}
说明
1.for关键字,表示循环控制
2.for有四要素:(1)循环变量初始化(2)循环条件(3)循环操作(4)循环变量迭代
3.循环操作,这里可以有多条语句,也就是我们要循环执行的代码
4.如果循环操作(语句)只有一条语句,可以省略{},建议不要省略
流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vTDTM26H-1619437823371)(images\image-20210425153051982.png)]
1.循环条件是返回一个布尔值的表达式
2.for(;循环判断条件;)中的初始化和变量迭代可以写到其他地方,但是两边的
分号不能省略。
2.循环初始值可以多条初始化语句,但要求类型一样,并且中间用逗号隔开
循环变量迭代也可以多条变量迭代语句,中间用逗号隔开。
4.使用内存分析法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KiTJrbAS-1619437823372)(images\image-20210425154505137.png)]
循环变量初始化;
whiile(循环条件){
循环体(语句);
循环变量迭代;
}
说明
1.while循环也有四要素
2.只是四要素放的位置,不一样
流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DTxDNo80-1619437823372)(images\image-20210425163352207.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QDa1XFUs-1619437823373)(images\image-20210425163815195.png)]
1.循环条件是返回一个布尔值的表达式
2.while循环实现判断在执行语句
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QiqmuIIk-1619437823373)(images\image-20210425165013305.png)]
循环变量初始化;
do{
循环体语句;
循环变量迭代;
}while(循环条件);
说明
1.do while是关键字
2.也有循环四要素,只是位置不一样
3.先执行,在判断,也就是说,一定会执行一次
4.最后有一个分号
4.while和do -while 区别举例:要账
流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZrWXJ8Rt-1619437823373)(images\image-20210425165724203.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5auZuWbc-1619437823374)(images\image-20210425170611256.png)]
1.循环条件是返回一个布尔值的表达式
2.do-while循环是先执行,在判断,因此最少执行一次
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iMXAEn00-1619437823374)(images\image-20210425171917652.png)]
1.将一个循环放在另一个循环体内,就形成嵌套循环,其中,for,while,do-while均可作为外层循环和内层循环,【建议一般使用两层,最多不超过三层,否则代码的可读性很差】
2.实际上,嵌套循环就是把内层循环当成外层循环的循环体,当只有内层循环为false时,才会跳出内层循环,才可以结束外层的当次循环,开始下一次的循环。
3.设外层循环次数为m次,内层为n次,则内次循环体实际上m*n次。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ejl4gm17-1619437823375)(images\image-20210425173143276.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KX9xmFfX-1619437823375)(images\image-20210425223757953.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PEclOqCo-1619437823375)(images\image-20210426123200640.png)]
需求:循环,但是循环的次数不知道,break,当某个条件满足时,终止循环通过改需求可以
说明其他流程控制的必要性,比如break
break语句用于终止某个语句块的执行,一般使用在switch或者循环[for , while,do-while]中
{
…
break;
…
}
配合while流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lS7xLgzN-1619437823376)(images\image-20210426163316840.png)]
满足条件跳出给定label的代码块。不再执行。和单独的break其实类似,单独的break作用于循环,带label的break作用于你定义的代码块。但是有一点,break label的位置一定要在label代码块的内部。否则无效,语法错误。
1.break语句出现在多层嵌套的语句快中时,可以通过标签指明要终止的是那一层
语句块
2.标签的基本使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hHrvAGZg-1619437823376)(images\image-20210426165026305.png)]
(1)break语句可以指定退出哪层
(2)label1是标签,由程序员指定
(3)break后 指定到哪个label就退出到哪里
(4)在实际的开发中,尽量不要使用标签
(5)如果没有指定break,默认退出最近的循环体
1.continue语句用于结束本次循环,继续执行下一次循环
2.continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明跳过的
时哪一层循环,这个和前面的的标签的使用的规则一样
{
…
continue;
…
}
流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xGitvbVw-1619437823377)(images\image-20210426170948297.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lQX0nak9-1619437823377)(images\image-20210426190856006.png)]
当return用在方法时,表示跳出方法,如果使用在main,表示退出语句
在方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-539BI484-1619437823377)(images\image-20210426192518927.png)]
在main
用标签
(5)如果没有指定break,默认退出最近的循环体
1.continue语句用于结束本次循环,继续执行下一次循环
2.continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明跳过的
时哪一层循环,这个和前面的的标签的使用的规则一样
{
…
continue;
…
}
流程图
[外链图片转存中…(img-xGitvbVw-1619437823377)]
[外链图片转存中…(img-lQX0nak9-1619437823377)]
当return用在方法时,表示跳出方法,如果使用在main,表示退出语句
在方法
[外链图片转存中…(img-539BI484-1619437823377)]
在main
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l928v4Lf-1619437823378)(images\image-20210426192738441.png)]