流程控制语句是用来控制程序中各语句执行顺序,可以把语句组合成能完成一定功能的小逻辑模块。
程序从上到下逐行执行,中间没有任何判断和跳转。
public class FlowControlDemo {
public static void main(String[] args) {
//程序从上到下依次加载执行,最后输出结果
int value = 3;
int lastValue = value + 3;
System.out.sprintln("最新值:"+lastVlaue);
}
}
Java的成员变量采用合法的前向引用(即未提前定义加载的成员变量不能被引用)。
public class FlowControlDemo {
//错误示范
public int val = num + 5;
public int num = 3;
}
当 if 括号里的条件表达式满足时(即为true,反之false),会执行 if 代码块(即两个大括号包裹部分)里的语句,否则执行该 if 代码块外的语句。
语法:
if(条件表达式) {
//执行语句;
}
示例:
int num = 3;
if (num > 5) {
System.out.println("num数值大于5");
}
System.out.println("num数值小于5"); //输出:num数值小于5
当 if 括号里的条件表达式满足时(即为true,反之false),执行 if 代码块(即两个大括号包裹部分)里的语句,否则执行 else 代码块内的语句。
语法:
if(条件表达式) {
//执行语句1;
} else {
//执行语句2;
}
示例:
int num = 3;
if (num > 5) {
System.out.println("num数值大于5");
} else {
System.out.println("num数值小于5"); //输出:num数值小于5
}
当第一个 if 括号里的条件表达式满足条件时(即为true,反之false),则执行该 if 代码块内(即两个大括号包裹部分)的语句,否则继续判断下一个 else if 括号里的条件表达式式( else if 可以有多个),直到判断满足条件的 if,并执行该 if 内的语句,否则执行最后一个 else 代码块内的语句。
语法:
if(条件表达式1) {
//执行语句1;
} else if(条件表达式2) {
//执行语句2;
} .... {
//执行语句3
} else if(条件表达式4){
//执行语句4;
} else {
//执行语句5;
}
注意:省略号表示可以有多个else if,并非只能有一个,根据个人判断逻辑决定。
示例:
int num = 3;
if (num > 5) {
System.out.println("num数值大于5");
} else if (num > 0){
System.out.println("num数值大于0"); //输出:num数值大于0
} else {
System.out.println("num数值小于0");
}
语法:
switch(表达式) {
case 常量1:
//执行语句1;
break;
case 常量2:
//执行语句2;
break;
.....
default:
//执行语句n;
break;
}
注意:
示例:
String level = "A";
switch (level) {
case "A":
System.out.println("优秀"); //输出:优秀
break;
case "B":
System.out.println("良好");
break;
case "C":
System.out.println("合格");
break;
default:
System.out.println("不合格");
}
语法:
for(初始化部分; 循环条件部分; 迭代部分) {
//执行循环体
}
示例:
int num = 10;
int count = 0;
for (int i = 0; i < num; i++) {
System.out.println("当前遍历次数:"+(++count));
}
语法:
初始化部分;
while(循环条件部分) {
//执行循环体
//迭代部分
}
注意:迭代部分要避免死循环。
示例:
int num = 10;
int count = 0;
while (num > 0) { //循环判断
System.out.println("当前遍历次数:"+(++count)); //执行语句
num--; //变量迭代
}
语法:
初始化部分;
do{
//循环体部分
//迭代部分
}while(循环条件部分);
注意:do while循环必执行一次。
示例:
int num = 10;
int count = 0;
do {
System.out.println("当前遍历次数:"+(++count));
num--;
} while (num > 0);
嵌套循环就是循环体内有循环,外层循环体内的循环称为内循环,当只有内层循环的循环条件为false时,才会完全跳出内层循环,执行内循环外的语句,执行完才可结束外层的当次循环,开始下一次循环。
流程图:(for循环嵌套为例,其他循环同理)
注意:一般嵌套循环不超过3层,避免禁止无限套娃,避免死循环以及问题定位复杂。
当多层循环中,跳出指定的某层循环,可以使用带标签的break或continue跳出。
outer:for (int i = 0; i < 10; i++) { //外循环标签outer
System.out.println("外循环输出:"+i);
inner:for (int j = 0; j < 3; j++) { //内循环标签inner
System.out.println("内循环输出:"+j);
if (j == 2) {
System.out.println("外循环结束");
break outer; //跳出外循环
}
}
}
示例:
/**
* 获取100以内的质数
* 扩展:质数是除了1和本身,不能被其他数整除的数
*/
public static void main(String[] args) {
//是否质数标识
boolean isFlag = true;
//0和1既不是质数也不是合数,所以从自然数2开始
for (int i = 2; i < 100; i++) {
//为什么是j<=Math.sqrt(i),一个数的平均跟
// 例如:10 = 2 * 5; 每一个数都会有对应的一个自然数与之匹配(2和5匹配),我们只需要取它匹配的一半(自然数2)就可,需要在取5去判断一次
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
isFlag = false;
//被其他数整除就说明该数不是质数,直接break不需要再执行
break;
}
}
if (isFlag) {
//输出质数
System.out.println(i);
}
isFlag = true;
}
}
终止某个语句块的执行。
在嵌套循环中,通过标签指明要终止的是哪一层循环。
注意:该终止语句只能用于Switch语句和循环语句中。
示例:
int num = 3;
while (num > 0) {
if(num == 1) {
break; //当num等于1时,终止while循环
}
num--;
}
只能使用在循环结构中,用于跳过当前循环,执行下一次循环。
在嵌套循环中,通过标签指明要跳过哪一层循环。
示例:
int num = 3;
while (num > 0) {
if(num == 1) {
continue; //当num等于1时,跳过执行后面的语句,直接开始下一次循环
}
System.out.println("循环输出:"+num);
num--;
}
结束整个方法,不管return处于多少层循环之内。
示例:
public void test() {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
if(j == 2) {
return; //结束整个test方法
}
}
}
}