Java基础第三章(流程控制语句)
本文讲的内容包括常见的流程控制语句,比如:if else判断语句、switch选择语句(击穿)、for循环语句、while循环语句、do while循环语句、循环嵌套、跳出语句break,continue。
-
流程控制简介
程序中的流程控制就是代码执行次序的安排和控制。
我们可以通过代码的结构去控制流程,常见的流程都有对应的代码结构:顺序流程(结构),选择流程,循环流程。 -
if else判断语句
if语句有三种语法格式:
if语句是指如果满足某种条件就进行某种处理,不满足就跳过选择语句,并继续执行。
if else在if循环语句上增加了不满足条件则执行else部分。
if…else if…else 则是进行多个条件判断,相对于if else的区别在于,else部分执行的是另一个if else判断语句(在不满足第一个条件的时候执行第二个) -
switch循环语句(注意击穿问题)
switch相对于if条件语句更有针对性,只能针对某个表达式的值做出判断,从而选择程序执行哪段代码。
switch(表达式) {//具体的某个变量
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
要注意的是,表达式中的值需要和case中的常量值类型相匹配。
执行流程:
首先计算出表达式的值。
其次,和case一次比较,一旦有对应的值,就会执行响应的语句,在执行过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后把程序结束。
重点:switch的case击穿:
每条case后如果不加break;跳出语句。就会出现一个情况,比如:满足case1,但在case3才遇到break;那么就会直接执行case3的语句,直到case3遇到的break语句跳出。
-
for循环语句
执行顺序:①②③④>②③④>②③④…②不满足为止。
①负责完成循环变量初始化
②负责判断是否满足循环条件,不满足则跳出循环
③具体执行的语句
④循环后,循环条件所涉及变量的变化情况注意:
初始化语句中的i可以使用任何数字
判断语句,一定要保证条件有边界,否则就是死循环了。
控制语句可以变通,也可以使用–,目的是让循环变化量起到变化。
这里的循环变量i出了循环结构就不能使用了。
i也可以定义在外面,那么出了循环结构也可以访问i -
while循环语句
while循环和for循环功能一样,只不过关键字不一样,代码结构不一样。和选择结构中的if判断也有点类似,满足条件就执行 {} 内的语句,区别在于while语句会反复执行,直到条件不成立。
流程:
- 执行顺序:①②③④>②③④>②③④…②不满足为止。
- ①负责完成循环变量初始化。
- ②负责判断是否满足循环条件,不满足则跳出循环。
- ③具体执行的语句。
- ④循环后,循环变量的变化情况。
注意:不要忘记写控制变量语句,否则会成无限执行的循环。
- do while循环语句
while后面有分号结束
无论如何会先执行一次,然后再去做条件判断是否继续执行。
执行流程:
- ①③④>②③④>②③④…②不满足为止。
- ①负责完成循环变量初始化。
- ②负责判断是否满足循环条件,不满足则跳出循环。
- ③具体执行的语句
- ④循环后,循环变量的变化情况
eg:
psvm{
int i=1;
do{
sout("helloworld");
i++;
}while(i<=10);
}
注意:while写在后面,且()后面有分号。
循环语句的区别
for和while的区别:
1.代码结构不同是最大的区别
控制条件语句所控制的那个变量:
在for循环结束后,就不能再被访问到了。
在while循环结束后还可以继续使用。
变量作用域:这是个程序设计概念,通常来说一个变量在程序中并不是总有效的,而限定这个变量的可用性的代码范围就是这个变量的作用域。
怎么找一个变量的作用域:
1)一般我们只要看下当前这个变量定义的位置在哪儿,找到变量所在的最近一对{ },从这个变量定义开始到 到右}结束,都是这个变量的作用范围在作用域范围之内我们才可以使用.
2)也有特例,比如像for循环语句中( )内定义的变量,其作用的范围只能在for语句结构中。
死循环:死循环就是循环中的条件永远为true,无法结束。
while死循环
while(true){
循环体;
}
for死循环
for( ; ; ){
循环体;
}
注意:在编译过程中若被编译器认定为死循环,那么在死循环下面的程序无法执行,而且会报错:无法访问的语句。
- 循环嵌套
循环嵌套是指在一个循环语句的循环体中再定义一个循环语句的语法结构。while、do while、for循环语句都可以进行嵌套,或者互相嵌套
格式:
for(初始化表达式①; 循环条件②; 控制条件语句⑦) { //分针
for(初始化表达式③; 循环条件④; 控制条件语句⑥) { //秒针
执行语句⑤;
}
}
流程:
假如外层循环执行2次,内循环执行次数2次执行顺序:
第一次循环:①②>③④⑤⑥>④⑤⑥>④
第二次循环:⑦②>③④⑤⑥>④⑤⑥>④>⑦②
外循环一次,内循环多次。
在生活中也能随处可见,比如说我们的钟表的指针。时、分、秒指针在周而复始的做运动。我们把秒针和分针拿出来分析。
在一小时里,分针要走60步。分针没走一分,秒针就走了60秒。把分针看成是外层循环,秒针看成是内层循环就很好理解了。
for(int min=0;min<60;min++){ //分针
for(int second=0;second<60;second++){ //秒针
System.out.println(min+":"+second); //打印时间
}
}
总循环次数=外循环次数*内循环次数
-
跳出语句break,continue
1)break
使用场景:终止switch或者循环
-在选择结构switch语句中
当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构(case中不加break会出现穿透,将switch时讲解过)switch结构后面的代码。
-在循环语句中
当出现在循环语句中,作用是终止并跳出循环语句,继续执行循环结构后面的代码。
注意:
当break出现在嵌套循环的内层循环,它只能跳出内层循环,如果要使用break语句跳出到外层循环,则需要在外层循环的关键字前添加标记。
eg:public static void main(String[] args) { int y=1; abc: while(y<10) { for(int x=1; x<=9; x++) { System.out.println("x="+x);//打印x的值 if(y==3) { //跳出循环的条件是当x==3的时候 break abc; //跳出abc循环 } } y++; } } `
2)continue
结束本次循环,继续下一次循环
eg:`
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);
}`
总结:
break跳出其所在循环不再执行
continue结束所在循环的本次执行,并继续循环。