Java循环结构全解析:从基础用法到性能优化(含经典案例)
Java循环结构全解析:从基础用法到性能优化(含经典案例)
- Java循环结构全解析:从基础用法到性能优化(含经典案例)
- 一、循环结构的核心作用与分类
- 1. 核心作用
- 2. 分类
- 二、四大循环结构的基础语法与经典案例
- 1. for循环:已知次数的精准循环
- 语法结构
- 经典案例1:打印直角三角形(嵌套for循环)
- 运行结果
- 经典案例2:生成乘法口诀表(双层for循环)
- 运行结果
- 2. while循环:未知次数的条件循环
- 语法结构
- 实例:用户输入验证(未知输入次数)
- 3. do-while循环:至少执行一次的循环
- 语法结构
- 实例:菜单交互(必须显示一次菜单)
- 4. 增强型for循环(for-each):简洁的集合遍历
- 语法结构
- 实例:遍历数组与集合
- 三、循环结构的核心差异与选择指南
- 1. 核心差异对比
- 2. 选择指南
- 四、循环中的关键操作:break、continue、return
- 1. break:终止当前循环
- 2. continue:跳过本次循环
- 五、循环性能优化技巧
- 六、常见循环错误与避坑指南
- 七、总结
本文收录于《 零基础入门Java·基础篇 学习大纲》
Java循环结构全解析:从基础用法到性能优化(含经典案例)
在Java编程中,循环结构是实现重复执行代码块的核心技术,也是处理批量数据、迭代逻辑的基础。无论是简单的次数循环、条件循环,还是集合迭代,掌握不同循环结构的适用场景和优化技巧,能显著提升代码的效率和可读性。本文将结合直角三角形打印、乘法口诀表生成等经典案例,全面拆解Java中的循环结构。
一、循环结构的核心作用与分类
1. 核心作用
循环结构的本质是重复执行一段代码块,直到满足终止条件。其核心价值在于:
- 减少重复代码(如批量处理1000条数据无需写1000行重复逻辑);
- 处理不确定次数的逻辑(如用户输入验证,直到输入合法才继续);
- 迭代数据集合(如遍历数组、集合中的元素)。
2. 分类
Java提供4种常用循环结构,适用于不同场景:
| 循环类型 | 核心特点 | 适用场景 |
|---|---|---|
| for循环 | 初始化、循环条件、迭代器分离,结构清晰 | 已知循环次数(如遍历数组、固定次数循环) |
| while循环 | 先判断条件再执行,条件不满足则一次不执行 | 未知循环次数(如依赖外部状态的循环) |
| do-while循环 | 先执行一次再判断条件,至少执行一次 | 必须执行一次的场景(如菜单交互、输入验证) |
| 增强型for循环 | 语法简洁,无需索引,直接遍历元素 | 遍历数组、集合(Collection),无需操作索引 |
二、四大循环结构的基础语法与经典案例
1. for循环:已知次数的精准循环
语法结构
for (初始化表达式; 循环条件表达式; 迭代表达式) {// 循环体:需要重复执行的代码
}
经典案例1:打印直角三角形(嵌套for循环)
直角三角形的打印需要控制每行的星号数量随行数递增,适合用嵌套for循环实现(外层控制行数,内层控制每行的星号数)。
public class RightTriangle {public static void main(String[] args) {int rows = 5; // 三角形的行数// 外层循环:控制行数(从1到rows)for (int i = 1; i <= rows; i++) {// 内层循环:控制每行的星号数量(第i行打印i个星号)for (int j = 1; j <= i; j++) {System.out.print("* ");}// 每行结束后换行System.out.println();}}
}
运行结果
*
* *
* * *
* * * *
* * * * *
经典案例2:生成乘法口诀表(双层for循环)
乘法口诀表是典型的行列关联场景,外层循环控制行数(乘数1),内层循环控制列数(乘数2),且列数不超过行数(避免重复计算)。
public class MultiplicationTable {public static void main(String[] args) {// 外层循环:控制行数(乘数i从1到9)for (int i = 1; i <= 9; i++) {// 内层循环:控制列数(乘数j从1到i,避免重复)for (int j = 1; j <= i; j++) {System.out.print(j + "×" + i + "=" + (j*i) + "\t");}// 每行结束后换行System.out.println();}}
}
运行结果
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
2. while循环:未知次数的条件循环
语法结构
初始化表达式;
while (循环条件表达式) {// 循环体迭代表达式;
}
实例:用户输入验证(未知输入次数)
import java.util.Scanner;public class WhileLoopDemo {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int password;// 循环直到输入正确的密码(123456)while (true) {System.out.print("请输入密码:");password = scanner.nextInt();if (password == 123456) {System.out.println("密码正确,登录成功!");break; // 满足条件,退出循环} else {System.out.println("密码错误,请重新输入!");}}scanner.close();}
}
3. do-while循环:至少执行一次的循环
语法结构
初始化表达式;
do {// 循环体迭代表达式;
} while (循环条件表达式);
实例:菜单交互(必须显示一次菜单)
import java.util.Scanner;public class DoWhileLoopDemo {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int choice;do {// 显示菜单(至少显示一次)System.out.println("\n===== 功能菜单 =====");System.out.println("1. 打印直角三角形");System.out.println("2. 生成乘法口诀表");System.out.println("3. 退出");System.out.print("请选择功能(1-3):");choice = scanner.nextInt();// 根据选择执行对应功能switch (choice) {case 1:printTriangle(5); // 调用直角三角形打印方法break;case 2:printMultiplicationTable(); // 调用乘法口诀表方法break;case 3:System.out.println("退出系统,再见!");break;default:System.out.println("输入错误,请重新选择!");}} while (choice != 3); // 选择3则退出循环scanner.close();}// 封装直角三角形打印方法private static void printTriangle(int rows) {for (int i = 1; i <= rows; i++) {for (int j = 1; j <= i; j++) {System.out.print("* ");}System.out.println();}}// 封装乘法口诀表方法private static void printMultiplicationTable() {for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {System.out.print(j + "×" + i + "=" + (j*i) + "\t");}System.out.println();}}
}
4. 增强型for循环(for-each):简洁的集合遍历
语法结构
for (元素类型 变量名 : 可迭代对象) {// 循环体:变量名直接引用集合中的元素
}
实例:遍历数组与集合
import java.util.ArrayList;
import java.util.List;public class ForEachDemo {public static void main(String[] args) {// 遍历数组int[] nums = {1, 3, 5, 7, 9};System.out.println("数组元素:");for (int num : nums) {System.out.print(num + " ");}// 遍历集合List<String> fruits = new ArrayList<>();fruits.add("苹果");fruits.add("香蕉");fruits.add("橙子");System.out.println("\n水果列表:");for (String fruit : fruits) {System.out.print(fruit + " ");}}
}
三、循环结构的核心差异与选择指南
1. 核心差异对比
| 对比维度 | for循环 | while循环 | do-while循环 | 增强型for循环 |
|---|---|---|---|---|
| 执行顺序 | 先判断,后执行 | 先判断,后执行 | 先执行,后判断 | 先迭代,后执行 |
| 循环次数确定性 | 已知次数(推荐) | 未知次数(推荐) | 至少执行一次(推荐) | 遍历集合/数组(推荐) |
| 典型案例 | 直角三角形、乘法表 | 用户输入验证 | 菜单交互 | 数组/集合遍历 |
2. 选择指南
- 若明确知道循环次数(如打印5行三角形、9行乘法表)→ 用
for循环; - 若循环次数依赖外部条件(如用户输入密码的次数)→ 用
while循环; - 若必须执行一次循环体(如显示菜单后再判断是否退出)→ 用
do-while循环; - 若仅需遍历集合/数组,无需操作索引 → 用
增强型for循环(代码更简洁)。
四、循环中的关键操作:break、continue、return
1. break:终止当前循环
例如在乘法口诀表中,若只想打印前5行:
for (int i = 1; i <= 9; i++) {if (i > 5) break; // 行数超过5则终止循环for (int j = 1; j <= i; j++) {System.out.print(j + "×" + i + "=" + (j*i) + "\t");}System.out.println();
}
2. continue:跳过本次循环
例如在直角三角形中,第3行不打印:
int rows = 5;
for (int i = 1; i <= rows; i++) {if (i == 3) continue; // 跳过第3行for (int j = 1; j <= i; j++) {System.out.print("* ");}System.out.println();
}
五、循环性能优化技巧
- 避免循环内创建对象:将对象创建移到循环外(如
StringBuilder复用); - 减少循环内的计算量:缓存集合长度(如
int size = list.size()); - 优化嵌套循环:乘法口诀表中通过
j <= i减少内层循环次数,避免冗余计算; - 利用并行流:大数据量循环时,用
parallelStream()利用多核CPU加速。
六、常见循环错误与避坑指南
- 死循环:确保循环条件最终会变为
false(如乘法表中i从1增至9后退出); - 索引越界:数组遍历用
i < array.length而非i <= array.length; - 增强型for循环修改集合:遍历集合时添加/删除元素会报错,需用迭代器。
七、总结
循环结构是Java编程的基础,通过本文的直角三角形、乘法口诀表等案例可以看出:
for循环适合控制固定次数的嵌套逻辑(如行列关联的图形或表格);while和do-while适合依赖外部条件的场景(如交互逻辑);- 增强型for循环简化了集合遍历的代码;
- 合理使用
break和continue能让循环逻辑更清晰。
若有转载,请标明出处:https://blog.csdn.net/CharlesYuangc/article/details/153798540
