Java 循环结构全解析及实战案例
一、循环结构概览
Java 提供 4 种循环结构和 2 种控制语句,构成完整的循环控制体系:
循环类型 | 特点 | 适用场景 |
---|---|---|
for | 明确循环次数 | 数组遍历、计数器 |
增强型 for | 简化集合遍历 | 集合/数组迭代 |
while | 先判断后执行 | 条件不确定循环 |
do-while | 先执行后判断 | 至少执行一次的操作 |
二、基础循环结构详解
1. for 循环(最常用)
语法结构:
for (初始化; 循环条件; 迭代语句) {
// 循环体
}
经典案例:
// 计算 1-100 累加和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("总和:" + sum); // 输出5050
// 嵌套循环打印乘法表
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();
}
2. 增强型 for 循环(foreach)
语法结构:
for (元素类型 变量名 : 集合/数组) {
// 使用变量操作元素
}
实战案例:
// 遍历数组
String[] fruits = {"Apple", "Banana", "Orange"};
for (String fruit : fruits) {
System.out.println(fruit);
}
// 遍历集合(需实现Iterable接口)
List<Integer> numbers = Arrays.asList(1, 2, 3);
for (int num : numbers) {
System.out.println(num * 2);
}
注意事项:
• 不可修改集合结构(增删元素会抛出异常)
• 无法获取当前索引位置
三、条件型循环结构
1. while 循环
语法结构:
while (循环条件) {
// 循环体
}
典型案例:
// 猜数字游戏
import java.util.Scanner;
int target = (int)(Math.random() * 100);
Scanner scanner = new Scanner(System.in);
int guess = -1;
while (guess != target) {
System.out.print("请输入猜测数字(0-99):");
guess = scanner.nextInt();
if (guess < target) {
System.out.println("猜小了!");
} else if (guess > target) {
System.out.println("猜大了!");
}
}
System.out.println("恭喜猜中!");
scanner.close();
2. do-while 循环
语法结构:
do {
// 循环体
} while (循环条件);
经典应用场景:
// 用户菜单系统
Scanner scanner = new Scanner(System.in);
int choice;
do {
System.out.println("==== 系统菜单 ====");
System.out.println("1. 查询余额");
System.out.println("2. 存款");
System.out.println("3. 取款");
System.out.println("0. 退出");
System.out.print("请选择操作:");
choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.println("当前余额:1000元");
break;
case 2:
System.out.println("存款功能暂未开放");
break;
case 3:
System.out.println("取款功能暂未开放");
break;
case 0:
System.out.println("感谢使用,再见!");
break;
default:
System.out.println("无效选择!");
}
} while (choice != 0);
scanner.close();
四、循环控制进阶技巧
1. 循环控制语句
语句 | 作用 | 示例 |
---|---|---|
break | 终止整个循环 | 跳出循环体执行后续代码 |
continue | 跳过本次循环剩余代码 | 直接进入下一次循环条件判断 |
实战案例:
// 查找第一个能被3整除的数
int[] numbers = {1, 4, 7, 9, 2, 6};
for (int num : numbers) {
if (num % 3 == 0) {
System.out.println("找到第一个符合要求的数:" + num);
break;
}
}
// 跳过奇数打印
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) {
continue;
}
System.out.println("当前偶数:" + i);
}
2. 标签跳转(Label)
// 双重循环中直接跳出外层循环
outerLoop:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i == 2 && j == 3) {
System.out.println("触发条件,跳出外层循环");
break outerLoop;
}
System.out.printf("(%d,%d) ", i, j);
}
System.out.println();
}
五、特殊循环场景处理
1. 无限循环与控制
// 服务器消息监听模拟
while (true) {
System.out.println("正在监听消息...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("收到终止信号!");
break;
}
}
2. 流式数据处理(Java 8+)
// 使用Stream API处理集合
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 并行流处理
names.parallelStream()
.filter(name -> name.length() > 3)
.map(String::toUpperCase)
.forEach(System.out::println);
六、性能优化与最佳实践
1. 循环优化策略
场景 | 优化方法 | 示例 |
---|---|---|
集合遍历 | 使用增强型for循环 | for (Element e : collection) |
频繁方法调用 | 缓存方法返回值 | 提前计算集合size |
复杂条件判断 | 提取到循环外部 | 预计算判断条件 |
2. 时间复杂度对比
循环类型 | 平均时间复杂度 | 适用数据规模 |
---|---|---|
单层循环 | O(n) | 百万级以下 |
双重嵌套循环 | O(n²) | 万级以下 |
三重嵌套循环 | O(n³) | 百级以下 |
七、企业级开发规范
1. 代码可读性要求
• 禁止超过 3 层循环嵌套
• 循环体代码行数控制在 20 行以内
• 复杂循环逻辑添加 中文注释
2. 安全注意事项
// 防范无限循环
int count = 0;
while (someCondition) {
// 添加安全计数器
if (count++ > 10000) {
throw new RuntimeException("循环次数超限");
}
// 业务逻辑...
}
通过掌握这些循环结构和优化技巧,开发者可以编写出既高效又易于维护的Java代码。建议在复杂循环逻辑中增加日志输出,便于调试和性能分析。