流程控制语句
流程控制语句用于控制程序中各语句的执行顺序。Java 流程控制分为三类:
- 顺序结构:默认执行顺序,从上到下依次执行
- 分支结构:根据条件选择执行不同代码(if-else, switch)
- 循环结构:重复执行某段代码(for, while, do-while)
1. if-else 分支语句
1.1 基本 if
语法:
if (条件表达式) {
// 条件为 true 时执行的代码
}
示例:
int age = 20;
if (age >= 18) {
System.out.println("成年人");
}
1.2 if-else
语法:
if (条件表达式) {
// 条件为 true 时执行
} else {
// 条件为 false 时执行
}
示例:
int score = 59;
if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
1.3 多重 if
多个条件依次判断:
if (条件1) {
// 条件1 为 true 执行
} else if (条件2) {
// 条件1 为 false,条件2 为 true 执行
} else {
// 所有条件都为 false 执行
}
示例:根据分数评等级:
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
// 输出:良好
💡 只有第一个满足条件的分支会执行,找到后就不会继续判断后面的条件了。
2. switch-case 多分支语句
switch 用于匹配一个表达式的值,匹配到哪个 case 就执行哪个分支。
语法:
switch (表达式) {
case 值1:
代码1;
break;
case 值2:
code2;
break;
default:
默认代码;
break;
}
- 表达式类型:可以是 byte, short, int, char, enum, String(Java 7+ 支持)
break:跳出 switch,如果没有 break,会继续执行后面的 case(穿透)default:所有 case 都不匹配时执行,可选
示例 1:根据数字判断星期几:
int day = 3;
switch (day) {
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;
}
// 输出:星期三
示例 2:case 穿透,多个值共享同一逻辑:
int month = 5;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println("31 天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println("30 天");
break;
case 2:
System.out.println("28 或 29 天");
break;
}
// 输出:31 天
利用穿透可以让多个 case 共用代码,减少重复。
3. for 循环
for 循环适合知道循环次数的情况。
语法:
for (初始化; 条件表达式; 更新) {
// 循环体,重复执行的代码
}
执行流程:
- 执行初始化
- 判断条件,如果为 false,结束循环
- 如果为 true,执行循环体
- 执行更新
- 回到步骤 2
示例:输出 1 到 10:
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
执行过程:
- i = 1,1 <= 10 → true → 输出 1 → i++ → i = 2
- i = 2,2 <= 10 → true → 输出 2 → i++ → i = 3
- … 直到 i = 11,11 <= 10 → false → 循环结束
示例:计算 1 到 100 的和:
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("1+2+...+100 = " + sum);
// 输出:5050
3.1 增强 for 循环
增强 for 循环适合遍历数组或集合,语法更简洁:
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
System.out.println(number);
}
如果需要索引、倒序遍历或修改指定位置元素,仍然使用普通 for 循环。
4. while 与 do-while 循环
4.1 while 循环
while 适合不知道循环次数,满足条件就继续循环。
语法:
while (条件) {
// 循环体
}
先判断条件,条件为 true 执行循环体,然后再判断,直到条件为 false 结束。
示例:输出 1 到 10:
int i = 1;
while (i <= 10) {
System.out.println(i);
i++;
}
示例:计算 1 到 100 的和:
int sum = 0;
int i = 1;
while (i <= 100) {
sum += i;
i++;
}
System.out.println(sum); // 5050
4.2 do-while 循环
语法:
do {
// 循环体
} while (条件);
特点:先执行一次循环体,再判断条件,所以循环体至少执行一次。
示例:
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 10);
5 break 与 continue
5.1 break
break 用于跳出整个循环或跳出 switch:
示例:找到第一个能被 17 整除的数就停止:
for (int i = 1; i <= 100; i++) {
if (i % 17 == 0) {
System.out.println("找到了:" + i);
break; // 跳出循环,不再继续
}
}
// 输出:找到了:17
5.2 continue
continue 用于跳过本次循环,进入下一次循环:
示例:输出 1 到 10 中所有奇数:
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 如果是偶数,跳过本次循环,不输出
}
System.out.println(i);
}
// 输出:1 3 5 7 9
对比 break 和 continue:
break:直接结束整个循环continue:只结束本次循环,继续下一次循环
6. 嵌套循环
循环里面还可以套循环,叫做嵌套循环。
示例:打印九九乘法表:
for (int i = 1; i <= 9; i++) { // 外层循环,控制行
for (int j = 1; j <= i; j++) { // 内层循环,控制列
System.out.print(j + "×" + i + "=" + (i * j) + "t");
}
System.out.println(); // 换行
}
输出:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
...
示例:打印矩形:
// 打印 5 行 8 列的星号矩形
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 8; j++) {
System.out.print("*");
}
System.out.println();
}