流程控制就是对事物次序的布置和安排,在程序中就是对代码执行次序的安排和控制
程序中的流程控制主要有三种:顺序流程、选择流程、循环流程。
顺序流程:比如打印输出的代码按照指定的顺序结构依次排序,打印的结果按照代码的顺序执行打印;
循环流程:选择结构的代码实现;
循环流程:循环结构的代码实现;
一、顺序结果
顺序结构最容易理解也比较简单,执行顺序就是代码编写的顺序,从上到下执行。简单举个例子:
public static void main(String[] args){//顺序执行,根据编写的顺序,从上到下运行System.out.println(1);System.out.println(2);System.out.println(3);
}
输出:
1
2
3
二、选择结构
Java代码中存在一种特殊的语句,叫做选择语句
,这种选择语句也需要对一些条件作出判断,从而选择对应执行的代码。这种选择语句组成的代码结构就是选择结构。
选择语句分为两种:if条件语句、switch条件语句。
1. if语句
if语句是满足某种要求的条件就进行某种处理。格式:
...//其他语句
if (布尔表达式) { //它的结果只有true或false语句体; //满足条件后执行的代码
}
执行流程:
- 首先判断布尔表达式,看其结果是true还是false
- 如果是true,执行语句体
- 如果是false就不执行语句体,
举例:
public static void main(String[] args){System.out.println("小明出来玩了")//int age=16;int age=20;//20岁if(age>=18){System.out.println("小明去上网了");}System.out.println("小明回家了")
}
2. if...else语句
if...else语句是指如果满足某种条件就进行某种处理,否则就进行另一种处理,格式:
if (布尔表达式){语句体1;
} else {语句体2;
}
执行流程:
- 首先判断布尔表达式看结果
- 如果是true就执行语句体1
- 如果是false就执行语句体2
举例:
public static void main(String[] args){// 判断给定的数据是奇数还是偶数// 定义变量int a = 1;if(a % 2 == 0) {System.out.println("a是偶数");} else{System.out.println("a是奇数");}System.out.println("结束");
}
3. if...else if...else语句
if...else if ...else可以对多个条件进行判断,进行多种不同的处理。
格式:
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。
举例:
public static void main(String[] args) { int socre=99;//定义变量记录分数if(socre>=90&&socre<=100) {System.out.println("成绩是优秀的!");} else if(socre>=80&&socre<90) {System.out.println("成绩很好!");} else if(socre>=70&&socre<80) {System.out.println("成绩良好!");} else if(socre>=60&&socre<70) {System.out.println("成绩及格!");} else if(socre>=0&&socre<60) {System.out.println("成绩不及格!");} else {System.out.println("不合法成绩");}
}
4. switch语句
switch条件语句也是一种比较常用的选择语句,和if条件语句不同的是,switch只能针对某个表达式的值
作出判断,从而决定程序执行那一段代码。
格式:
switch(表达式) {//具体的某个变量case 常量值1:语句体1;break;
case 常量值2:语句体2;break;...default:语句体n+1;break;
}
注意:switch的表达式只能是byte、short、int、char、Enum、String。
执行流程:
- 首先计算出表达式的值
- 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
- 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
举例:
public static void main(String[] args) {//定义变量,判断是星期几int weekday = 6;//switch语句实现选择switch(weekday) {case 1:System.out.println("星期一");break;case 2:System.out.println("星期二");break;case 3:System.out.println("星期三");break;case 4:System.out.println("星期四");break;case 5:System.out.println("星期五");break;case 6:System.out.println("星期六");break;case 7:System.out.println("星期日");break;default:System.out.println("你输入的数字有误");break;}
}
特别注意:break不能漏写,漏写了会出现case穿透
其实case的穿透性不算是一个bug,用好了可以简练代码,实际开发中可以灵活运用case穿透性解决相应的需求,用的不好会改变代码逻辑。如果case的后边不写break,将出现穿透现象,不再判断下一个case指,直接向后运行直到遇见break;
举个简单的例子:
public static void main(String[] args) {int week=1;switch(week) {case 1:case 2:case 3:case 4:case 5:System.out.println("工作日");break;case 6:case 7:System.out.println("休息日");break;default :System.out.println("数字不在1~7范围之内,请重新指定");}
}
三、循环结构
Java中一段代码重复执行的语句叫做循环语句,这种循环语句形成的结构就叫做循环结构。
循环语句有三种:for语句、while语句、do...while语句。
1. for语句
格式:
for ( 初始化语句① ; 判断条件语句② ; 控制条件语句④ ) {循环体语句③}
执行流程:
- 执行顺序:①②③④>②③④>②③④…②不满足为止。
- ①负责完成循环变量初始化
- ②负责判断是否满足循环条件,不满足则跳出循环
- ③具体执行的语句
- ④循环后,循环条件所涉及变量的变化情况
举例:
public static void main(String[] args) {//1.定义一个初始化变量,记录累加求和,初始值为0int sum = 0;//2.利用for循环获取1-100之间的数字for (int i = 1; i <= 100; i++) {//3.判断获取的数字是奇数还是偶数if(i % 2==0){//4.如果是偶数就累加求和sum += i;}}//5.循环结束之后,打印累加结果System.out.println("sum:"+sum);
}
注意:
- 初始化语句i可以是任意的数字
- 判断语句一定要保证条件有边界,可以让程序停下来,否则就会出现死循环
- 控制语句可以变通,主要目的是让循环变量变化
- 循环变量出了循环结构就不能使用
2. 循环语句while
格式:
初始化语句①
while ( 条件判断② ) {循环体语句③ 条件控制语句(步进表达式)④
}
和for循环功能一样,只不过关键字不一样,代码结构不一样。和选择结构中的if判断也有点类似,满足条件就执行 {} 内的语句,区别在于while语句会反复地执行,知道条件不成立。
执行流程:
- 执行顺序:①②③④>②③④>②③④…②不满足为止。
- ①负责完成循环变量初始化。
- ②负责判断是否满足循环条件,不满足则跳出循环。
- ③具体执行的语句。
- ④循环后,循环变量的变化情况。
举例:
public static void main(String[] args) {//使用while循环实现//定义一个变量,记录累加求和int sum = 0;//定义初始化表达式int i = 1;//使用while循环让初始化表达式的值变化while(i<=100){//累加求和sum += i ;//步进表达式改变变量的值i++;}//打印求和的变量System.out.println("1-100的和是:"+sum);
}
注意:控制变量语句不能忘记,否则会出现死循环。
3. do...while语句
格式:
初始化表达式①
do{循环体③条件控制语句④
}while(条件判断语句 ②); //这里有分号结束
执行顺序:①③④>②③④>②③④…②不满足为止。
举例:
public static void main(String[] args) {int x=1;do {System.out.println("HelloWorld");x++;}while(x<=10);
}
注意:
- while后边一定要有分号结束
- 无论条件是否满足都会先执行一次循环体,然后再去根据判断是否继续执行。
4. 嵌套循环
嵌套循环是指一个循环语句中再定义一个循环语句的语法结构。
for嵌套循环格式:
for(初始化表达式①; 循环条件②; 控制条件语句⑦) { //分针 for(初始化表达式③; 循环条件④; 控制条件语句⑥) { //秒针 执行语句⑤; }
}
执行流程:
假如外层循环执行2次,内循环执行次数2次执行顺序:
第一次循环:①②>③④⑤⑥>④⑤⑥>④
第二次循环:⑦②>③④⑤⑥>④⑤⑥>④>⑦②
5. 跳转语句
调整语句主要有两个:break和continue
break:
使用场景:终止switch或循环
这里主要说一下在循环语句中的作用,当出现在循环语句中,作用就是终止并跳出循环,继续执行循环结构后边的代码:
while循环举例:
public static void main(String[] args){int x=1; //定义变量x,初始值为1while(x<=10){ //循环条件 if(x==3){ //跳出循环的条件是当x==3的时候break; //跳出循环}System.out.println("x="+x);//条件成立,打印x的值 x++; //x进行自增}
}
//不加break将会执行10次,加了break当x==3时候就跳出循环
for循环中举例:
public static void main(String[] args){for(int x=1;x<=10;x++){ System.out.println("x="+x);//打印x的值if(x==3){ //跳出循环的条件是当x==3的时候break; //跳出循环}}
}
特别注意:当break语句出现在嵌套循环中的内层循环是,它只能跳出内层循环,如果想跳出到外层循环需要在外层循环的关键字前添加标记,然后跳转到标记,这样才能跳出外层循环。
public static void main(String[] args) {int y=1;demo: while(y<10) { for(int x=1; x<=9; x++) { System.out.println("x="+x);//打印x的值 if(y==3) { //跳出循环的条件是当x==3的时候 break demo; //跳出demo循环} } y++;}}
continue:
continue是结束本次循环,继续下一次循环。
//求1-100之间的奇数的和
public static void main(String[] args) {int sum=0; for (int i = 1; i <= 100; i++) {if(i % 2==0){ //如果是偶数,结束本次循环continue;}sum+=i;//不断累加 }System.out.println(sum);
}