今日内容
流程控制语句
顺序结构
选择结构
if语句
switch语句
循环结构
for循环
while循环
do...while循环
跳转语句
break
continue
顺序结构
按照从上往下的顺序依次执行
选择结构
if语句
格式一:单if
if(布尔表达式){
// 语句体;
}
执行流程:
首先判断布尔表达式的结果,如果是true,就执行if里面的语句体
如果是false,就不执行。
格式二:if...else...
if(布尔表达式){
// 语句体1
}else {
// 语句体2;
}
执行流程:
首先判断布尔表达式的结果,如果是true,就执行if里面的语句体
如果是false,就执行else里面的语句体
二选一的情况,有且仅会有一个语句体会执行
格式三:if...else if...else
if(布尔表达式1){
// 语句体1;
}else if(布尔表达式2){
// 语句体2;
}else if(布尔表达式3){
// 语句体3;
}
...
else {
// 语句体n+1;
}
执行流程:
首先执行if小括号中的布尔表达式1,如果为true,就执行语句体1,然后整个if语句结束;
如果为false,继续判断else if小括号中的布尔表达式2,如果为true,就执行语句体2,然后整个if语句结束;
如果为false,依次类推,继续判断else if小括号中的表达式
最后如果所有的布尔表达式的结果都为false,这时才执行else里面的语句体n+1
多选一的情况,有且仅会有一个语句体会执行
注意事项:
(1)if的小括号后面不要打分号(;)
比如:
int num = -2;
// 判断是否是正数
if(num > 0);{ // 小括号后面不能打分号(;),编译虽然不会报错,但是if语句不再控制后面的大括号的语句体了
System.out.println(num+"是正数");
}
(2)if格式里面的大括号在某些情况下(if语句控制的是一行代码时)可以省略,一般不建议省略
比如:
int num = 3;
if(num % 2==0) // 此处省略的if的大括号,当它控制一行代码的时候没有问题
System.out.println("是偶数");
else
System.out.println("是奇数");
(3)if的格式中的else语句可以省略,一般建议不省略,这是对其他情况的处理方式
比如:
int x = -10;
int y = 0;
if (x >= 3) {
y = 2 * x + 1;
} else if (-1 < x && x < 3) {
y = 2 * x;
} else if(x <= -1) {
y = 2 * x - 1;
} // else语句可以省略,对于格式来说没有问题
System.out.println("结果是:" + y);
switch语句
格式:
switch(表达式){
case 值1:
// 语句体1;
break;
case 值2:
// 语句体2;
break;
case 值3:
// 语句体3;
break;
...
default:
// 语句体n+1;
break;
}
执行流程:
首先执行表达式,拿到表达式的结果从上往下依次匹配case后面的值,
如果相等,就执行对应case里面的语句体,执行完之后结束整个switch语句
如果不相等,继续匹配下面的case后面的值
依次类推,如果相等就执行对应的case后面的语句体,执行完之后结束整个switch语句
如果不相等,继续匹配下面的case后面的值
当所有的case都不匹配的时候,最终会执行default里面的语句体,结束整个switch语句
注意事项:
(1)default语句的位置可以任意,可以在所有的case之上,也可以在所示的case之下,还可以在多个case之间
default语句的位置在哪里,不影响程序的正常执行流程
甚至default语句都可以省略,一般不建议省略default语句
(2)switch后面的小括号中的表达式的结果的类型只能是
byte short char int
JDK1.5之后可以是枚举
JDK1.7之后可以是String
(3)case穿透问题
switch语句结束的条件由两个:第一个是遇到break,第二个遇到switch的右大括号(})
当break省略之后就容易出现case穿透问题
课堂练习:
根据switch的执行流程,分析以下程序的执行结果?
public class Test {
public static void main(String[] args) {
int x = 2,y=3;
switch(x)
{
default:
y++;
case 3:
y++;
break;
case 4:
y++;
}
System.out.println("y="+y);
}
}
循环结构
for循环
格式:
for(初始化语句;布尔表达式;步进语句){
循环体;
}
while循环
标准格式:
while(布尔表达式){
循环体;
}
扩展格式:
初始化语句;
while(布尔表达式){
循环体;
步进语句;
}
do...while循环
标准格式:
do{
循环体;
}while(布尔表达式);
扩展格式:
初始化语句;
do{
循环体;
步进语句;
}while(布尔表达式);
特点:
不论布尔表达式结果是否为true,循环体一定至少会执行一次
三种循环的区别
1、do...while跟for和while的区别
do...while不论布尔表达式结果是否为true,一定会至少执行一次循环体
for和while如果布尔表达式结果为false,不会执行循环体
2、for跟do...while和while的区别
for中定义的初始化语句,只在for循环中有效,出了for循环消失了不可以用
do...while和while循环里的初始化语句,即使出了循环也可以继续使用
循环的选择:
(1)循环的次数确定,选择的顺序: for > while > do...while
(2)循环的次数不确定,选择的顺序: while > for > do...while
while(true){
// 当满足条件,可以通过跳转语句,结束循环
}
跳转语句
break
使用场景:
1、在switch语句中,用于退出switch语句
2、在循环中,用于结束整个循环
注:
出了使用场景使用break会出错。
continue
使用场景:
只能在循环中使用
用于结束当次循环,继续下一次循环
面试题:
请说说break和continue的区别?
(1)使用场景的区别
(2)在循环中的作用的区别
死循环
1、
while(true){
}
2、
for(;;){
}
不重点的内容
(1)do...while循环
(2)顺序结构