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 提供了三种核心循环结构:forwhiledo…while,它们各自适用于不同场景,共同构成了程序逻辑中的“重复引擎”。

循环的必要性

想象一个场景:你需要将 1 到 100 的数字相加。如果手动编写 100 次加法运算,不仅效率低下,还容易出错。而循环结构能通过简洁的代码,自动完成这一重复任务。循环的引入,使程序能高效处理大量重复性操作,是编程中不可或缺的控制结构。


Java 循环结构详解

1. for 循环:明确步数的“计数器”

语法结构

for 循环适合已知重复次数的场景,其语法如下:

for (初始化表达式; 条件表达式; 迭代表达式) {  
    // 循环体  
}  
  • 初始化表达式:定义循环变量(如 int i = 0)。
  • 条件表达式:判断循环是否继续执行。
  • 迭代表达式:更新循环变量(如 i++)。

执行流程

  1. 执行初始化表达式,定义循环变量。
  2. 判断条件表达式是否为 true
  3. 若为 true,执行循环体;若为 false,退出循环。
  4. 执行迭代表达式,更新变量,返回步骤 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 需手动管理初始化、条件和迭代。

执行流程

  1. 执行初始化表达式。
  2. 判断条件表达式是否为 true
  3. 若为 true,执行循环体;否则退出循环。
  4. 执行迭代表达式,返回步骤 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 (条件表达式);  

执行流程

  1. 执行初始化表达式。
  2. 执行循环体一次(即使条件不满足)。
  3. 判断条件表达式是否为 true
  4. 若为 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); // 直到用户选择退出  

比喻:这如同自助餐厅,你必须至少尝试一道菜后,才决定是否继续点餐。


三种循环的对比与选择

对比表格

循环类型语法结构执行顺序适用场景
forfor (初始化;条件;迭代)初始化→条件→循环体→迭代已知循环次数
whilewhile (条件)条件→循环体条件驱动的未知循环次数
do…whiledo {…} 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 循环结构(forwhiledo…while)是编程中的“重复利器”,其核心在于通过不同语法适应多样场景。理解它们的执行流程、适用条件,并结合实际案例练习,能显著提升代码效率与可读性。无论是处理已知次数的任务,还是动态条件下的循环,选择合适的循环结构,如同为程序安装最适合的“引擎”,让代码运行得更高效、更可靠。

通过本篇文章的学习,读者应能掌握以下技能:

  1. 根据需求选择 forwhiledo…while
  2. 避免常见错误,如无限循环或变量作用域问题。
  3. 在实际项目中灵活运用循环,优化代码逻辑。

编程之路,循环是基础也是进阶的跳板。通过不断练习与实践,循环结构将成为你解决问题的得力工具。

最新发布