Java 循环结构 – for, while 及 do…while(长文讲解)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
循环结构的基础概念
什么是循环结构?
在编程中,循环结构是重复执行一段代码的机制,如同生活中的“重复性任务”——比如每天定时浇水的植物、工厂流水线上的重复操作。Java 提供了三种核心循环结构:for
、while
和 do…while
,它们各自适用于不同场景,共同构成了程序逻辑中的“重复引擎”。
循环的必要性
想象一个场景:你需要将 1 到 100 的数字相加。如果手动编写 100 次加法运算,不仅效率低下,还容易出错。而循环结构能通过简洁的代码,自动完成这一重复任务。循环的引入,使程序能高效处理大量重复性操作,是编程中不可或缺的控制结构。
Java 循环结构详解
1. for 循环:明确步数的“计数器”
语法结构
for
循环适合已知重复次数的场景,其语法如下:
for (初始化表达式; 条件表达式; 迭代表达式) {
// 循环体
}
- 初始化表达式:定义循环变量(如
int i = 0
)。 - 条件表达式:判断循环是否继续执行。
- 迭代表达式:更新循环变量(如
i++
)。
执行流程
- 执行初始化表达式,定义循环变量。
- 判断条件表达式是否为
true
。 - 若为
true
,执行循环体;若为false
,退出循环。 - 执行迭代表达式,更新变量,返回步骤 2。
示例:计算 1 到 10 的和
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i;
}
System.out.println("总和为:" + sum); // 输出:55
比喻:这如同每天数步数,从 1 数到 10,每数一步就记录一次总和。
扩展:增强型 for 循环
Java 5 引入了“增强型 for
循环”,专为遍历数组或集合设计:
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.print(num + " "); // 输出:1 2 3 4 5
}
2. while 循环:灵活的“条件守门人”
语法结构
while
循环适合条件不确定的场景,语法如下:
初始化表达式;
while (条件表达式) {
// 循环体
迭代表达式;
}
与 for
不同,while
需手动管理初始化、条件和迭代。
执行流程
- 执行初始化表达式。
- 判断条件表达式是否为
true
。 - 若为
true
,执行循环体;否则退出循环。 - 执行迭代表达式,返回步骤 2。
示例:猜数字游戏
int secretNumber = 42;
int guess;
Scanner scanner = new Scanner(System.in);
System.out.println("猜一个 1-100 的数字!");
while (true) { // 无限循环,直到条件满足
guess = scanner.nextInt();
if (guess == secretNumber) {
System.out.println("恭喜猜对!");
break; // 退出循环
} else if (guess < secretNumber) {
System.out.println("太小了!");
} else {
System.out.println("太大了!");
}
}
比喻:这如同红绿灯前的等待,只有当条件(绿灯)满足时,车辆才会通过。
3. do…while 循环:至少执行一次的“先行动后判断”
语法结构
do…while
循环确保循环体至少执行一次,语法如下:
初始化表达式;
do {
// 循环体
迭代表达式;
} while (条件表达式);
执行流程
- 执行初始化表达式。
- 执行循环体一次(即使条件不满足)。
- 判断条件表达式是否为
true
。 - 若为
true
,重复步骤 2;否则退出循环。
示例:菜单系统
int choice;
do {
System.out.println("1. 查看余额");
System.out.println("2. 转账");
System.out.println("3. 退出");
System.out.print("请选择:");
Scanner scanner = new Scanner(System.in);
choice = scanner.nextInt();
// 处理选择逻辑…
} while (choice != 3); // 直到用户选择退出
比喻:这如同自助餐厅,你必须至少尝试一道菜后,才决定是否继续点餐。
三种循环的对比与选择
对比表格
循环类型 | 语法结构 | 执行顺序 | 适用场景 |
---|---|---|---|
for | for (初始化;条件;迭代) | 初始化→条件→循环体→迭代 | 已知循环次数 |
while | while (条件) | 条件→循环体 | 条件驱动的未知循环次数 |
do…while | do {…} while (条件) | 循环体→条件 | 需至少执行一次的场景 |
如何选择?
- 已知循环次数:优先
for
,因其结构清晰,可读性强。 - 条件驱动的未知次数:使用
while
,例如用户输入验证。 - 强制至少执行一次:选择
do…while
,例如菜单系统。
常见问题与注意事项
1. 避免无限循环
如果循环条件永远为 true
(如 while (true)
未设置退出条件),程序将无限运行。需通过 break
或修改条件避免。
2. 变量作用域
在 for
循环的初始化表达式中定义的变量(如 int i
),其作用域仅限于循环体内。
3. 复合条件表达式
可结合逻辑运算符(如 &&
、||
)构建复杂条件,例如:
while (count < 10 && !isGameOver) {
// 游戏逻辑
}
实战案例:综合应用循环结构
案例 1:计算阶乘
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个正整数:");
int n = scanner.nextInt();
int factorial = 1;
// 使用 for 循环计算阶乘
for (int i = 1; i <= n; i++) {
factorial *= i;
}
System.out.println(n + "! = " + factorial);
案例 2:斐波那契数列
int a = 0, b = 1, c;
System.out.print(a + " " + b + " ");
// 使用 while 循环生成前 10 项
while (b < 100) {
c = a + b;
System.out.print(c + " ");
a = b;
b = c;
}
结论
Java 循环结构(for
、while
、do…while
)是编程中的“重复利器”,其核心在于通过不同语法适应多样场景。理解它们的执行流程、适用条件,并结合实际案例练习,能显著提升代码效率与可读性。无论是处理已知次数的任务,还是动态条件下的循环,选择合适的循环结构,如同为程序安装最适合的“引擎”,让代码运行得更高效、更可靠。
通过本篇文章的学习,读者应能掌握以下技能:
- 根据需求选择
for
、while
或do…while
。 - 避免常见错误,如无限循环或变量作用域问题。
- 在实际项目中灵活运用循环,优化代码逻辑。
编程之路,循环是基础也是进阶的跳板。通过不断练习与实践,循环结构将成为你解决问题的得力工具。