Java流程控制与循环结构详解
分支结构:switch语句
switch作为多分支选择结构,其表达式支持的数据类型包括:
- 基本整型:byte、short、char、int
- 包装类型:Byte、Short、Character、Integer
- 枚举类型(Enum)
- 字符串类型(String,Java 7+)
关键注意事项:
- case后的值必须是编译期常量,不允许使用变量
- case标签的类型需与switch表达式类型匹配或兼容
- case穿透问题:每个case分支末尾建议添加break语句
- default分支位置灵活,通常置于末尾处理兜底逻辑
- 多case合并写法:
// 传统写法 case 1: case 2: case 3: 执行语句; break; // Java 12+ 箭头语法 switch (score) { case 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100 -> System.out.println("优秀"); case 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 -> System.out.println("及格"); default -> System.out.println("其他"); }
循环结构实践
以素数筛选为例,演示循环的嵌套应用:
public class PrimeFilter {
public static void main(String[] args) {
// 外层循环遍历待检测数值
for (int candidate = 2; candidate <= 100; candidate++) {
boolean isPrime = true;
// 内层循环:检测candidate是否为素数
// 优化:只需检测至平方根即可
int boundary = (int) Math.sqrt(candidate);
for (int divisor = 2; divisor <= boundary; divisor++) {
if (candidate % divisor == 0) {
isPrime = false;
break; // 发现因子即可终止内层循环
}
}
if (isPrime) {
System.out.printf("%d ", candidate);
}
}
}
}
算法优化点:将检测上限从n/2降至√n,时间复杂度由O(n²)优化为O(n√n)。
跳转语句:break与continue
| 语句 | 作用范围 | 行为特征 |
|---|---|---|
| break | 当前最内层循环/switch | 立即终止整个循环结构 |
| continue | 当前循环迭代 | 跳过本次迭代剩余代码,进入下一轮循环 |
带标签的跳转(用于多层嵌套):
outer: for (int row = 0; row < matrix.length; row++) {
inner: for (int col = 0; col < matrix[row].length; col++) {
if (matrix[row][col] == target) {
System.out.println("找到目标位置: (" + row + "," + col + ")");
break outer; // 直接跳出外层循环
}
}
}
标签命名遵循标识符规则,冒号紧跟标签名后。此机制在复杂嵌套结构中可精确控制跳转目标,但过度使用会降低代码可读性。
