流程控制
流程控制:在程序执行过程中,每条语句的执行顺序对程序的结果有直接影响。因此我们要控制语句的执行顺序,来实现我们的功能。
顺序结构
顺序结构:程序中的语句从上到下顺序执行。
public class Test {
public static void main(String[] args) {
//顺序执行,根据编写的顺序从上到下顺序执行。
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(5);
}
}
选择结构
判断语句 if
格式1:if
if([关系表达式]){
[语句体];
}
执行流程:首先判断关系表达式的结果是ture还是false,如果是ture执行语句体,如果是false,不执行语句体判断语句结束。
格式2:if...else
if([关系表达式]){
[语句体1];
}else{
[语句体2];
}
执行流程:首先判断关系表达式的结果是ture
还是false
,如果是ture
执行语句体1
,然后判断语句结束,如果是false
执行语句体2
,然后语句体结束。
格式3:if...else if...else
if([关系表达式1]){
[语句体1];
}else if([关系表达式2]){
[语句体2];
}
......
}else if([关系表达式n]){
[语句体n];
}else{
[语句体n+1];
}
执行流程:首先判断关系表达式的结果是ture
还是false
,如果是ture
执行语句体1
,然后选择语句结束,如果是false
判断下面的else if
中的关系表达式,如果出现ture
就执行内部语句体然后结束选择语句,在不出现ture
的情况下如果最后有else
(注意不是if else
)内部的语句体,选择语句结束,如果没有else
选择语句结束。
选择语句 switch
格式:
switch ([表达式]){
case [常量值1]:
[语句体1];
break;
case [常量值2]:
[语句体2];
break;
......
case [常量值n]:
[语句体n];
break;
default:
[语句体n+1];
break;
}
举例:
public class Test {
public static void main(String[] args) {
switch(2) {
case 1:
System.out.println(1);
break;
case 2:
System.out.println(2); //会输出
// break;
case 3:
System.out.println(3); //会输出
//break;
default:
System.out.println("结束"); //会输出
}
}
}
执行流程:首先计算出表达式的值依次和case:
比较,一旦有对应的值就会执行相应case:
内的语句。遇到break;
就会结束这次选择语句。在所有的case:
都不匹配的情况下,如果有default:
,就会执行default:
内的语句,如果没有default:
,选择语句结束。
注意事项:
switch
后面表达式
的值和case:
后面的常量值只能是基本数据类型byte\short\int\char
类型,和引用数据类型String字符串\enum枚举
- 多个
case:
的情况下后面的常量值不能重复。 switch
语句很灵活,case:
前后顺序可以颠倒,而且break;
语句也可以省略。- 每个
case:
都要带break;
语句,因为如果没有带break;
语句,就会穿透下面的case:
语句直达遇到break;
或者直到执行到大括号才会结束选择语句。
循环结构
循环结构:是在条件允许的条件下,反复执行某一段代码,这段被反复执行的代码叫做循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环体会被一直执行下去,形成死循环。
基本组成部分:
- 初始化语句:在循环开始的时候执行,而且只执行一次。
- 条件判断:如果条件成立,则循环继续,如果条件不成立,则循环结束。
- 循环体:重复要做的事情,若干行语句。
- 步进语句:每次循环之后要进行的扫尾工作,每次循环结束要结束一次。
循环语句 for
格式:
for([初始化表达式];[布尔表达式];[步进表达式]){
[循环体];
}
执行流程:第一步:负责完成循环变量初始化。第二步:判断时候满足循环条件,不满足跳出循环。第三步:执行循环体。第四步:执行步进语句。循环执行第二步、第三步、第四步,如果第二步不满足则跳出循环。
循环语句 while
[初始化表达式];
while([布尔表达式]){
[循环体];
[步进表达式];
}
执行流程:第一步:负责完成循环变量初始化。第二步:判断时候满足循环条件,不满足跳出循环。第三步:执行循环体。第四步:执行步进语句。循环执行第二步、第三步、第四步,如果第二步不满足则跳出循环。
循环语句 do...while
[初始化表达式];
do{
[循环体];
[步进表达式];
}while([布尔表达式]);
执行流程:第一步:负责完成循环变量初始化。第二步:执行循环体。第三步:执行步进语句。第四步:判断时候满足循环条件,不满足跳出循环。循环执行第二步、第三步、第四步,如果第四步不满足则跳出循环。
举例:
public class Test {
public static void main(String[] args) {
{
int m = 10;
while (m > 10) {
System.out.println(m);
m--;
}
//没有输出
}{
int m = 10;
do{
System.out.println(m);
m--;
}while(m>10);
//输出一次
}
}
}
注意事项:
for
循环while
循环是先判断后执行,do...while
循环是先执行后判断下次是否执行。因此for
循环while
循环如果条件从没有满足过循环将会执行0次。do..while
循环不管条件是否满足,循环最少执行一次。for
循环的初始化语句是在循环内部定义,循环结束不能在使用。while
循环和do...while
循环的初始化语句是在循环外部定义,循环结束还可以继续使用。- 如果循环次数确定,多用
for
循环,其他情况可以考虑while
循环,do...while
循环用的最少。
break
关键字
用法:
- 可以用在
switch
语句当中,如果执行了该语句,整个switch
语句立刻结束。 - 可以用在循环语句当中,如果执行了该语句,整个循环语句立刻结束。
举例:
public class Test {
public static void main(String[] args) {
{
for (int i = 1; i <= 10; i++) {
System.out.println("输入第 " + i + " 次");
}
} //输出10次
System.out.println("===========");
{
for (int i = 1; i <= 10; i++) {
if(i>5){ //当i>5时执行语句break;跳出循环
break;
}
System.out.println("输入第 " + i + " 次");
}
} //输出5次
}
}
continue
关键字
用法:
- 用在循环语句中,如果执行了该语句,立刻跳过当前次循环剩余内容,马上执行下一次循环。
public class Test {
public static void main(String[] args) {
{
for (int i = 1; i <= 10; i++) {
System.out.println("输入第 " + i + " 次");
}
}
System.out.println("===========");
{
for (int i = 1; i <= 10; i++) {
if(i==5){
System.out.println("没有第5次了");
continue;
}
System.out.println("输入第 " + i + " 次");
}
}
}
}