关键在于循环条件须能变为false且循环体内必须更新相关变量;常见错误是遗漏变量更新,如int i=1;while(i<=5){printf("%d ",i);}会死循环。

写 while 循环不陷入死循环,关键在于:循环条件必须能在某次迭代中变为 false,且循环体内必须有能影响该条件的语句(通常是变量更新)。
循环变量必须在循环体内被修改
最常见死循环就是忘了更新判断用的变量。比如想打印 1 到 5:
❌ 错误写法(死循环):int i = 1;<br>while (i <= 5) {<br> System.out.println(i);<br> // 忘了写 i++!<br>}
✅ 正确写法:int i = 1;<br>while (i <= 5) {<br> System.out.println(i);<br> i++; // 每次都推进,最终让 i 变成 6,条件不成立<br>}
立即学习“Java免费学习笔记(深入)”;
更新操作要放在合适位置,避免跳过或重复执行
如果更新语句写在 break 或 return 后面,或者被 if 拦住没执行,也可能卡住:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 别把 i++ 放在 if 的某个分支里,而其他分支没更新
- 别在 while 里用了 break 跳出前就提前终止了变量更新
- 调试时可加一句
System.out.println("i = " + i);看它是否在变
注意浮点数和对象引用的条件判断
用浮点数做条件容易因精度问题卡住:
❌ 危险写法:double x = 0.0;<br>while (x != 1.0) {<br> x += 0.1; // 实际可能变成 0.9999999… 或 1.0000001…,永远不等于 1.0<br>}
✅ 更稳妥的方式:改用整数计数,或用范围判断:while (x
循环前先想清楚“什么时候该停”
动笔写 while 前,花 10 秒问自己三个问题:
- 初始状态是什么?
- 每次循环后,什么值会变?怎么变?
- 这个变化最终会不会让条件变成 false?有没有边界意外(比如越界、空指针)?
比如读文件行数,不能只写 while ((line = reader.readLine()) != null) 就完事,还要确保 reader 已打开、没异常中断;否则可能看似条件满足,实则阻塞或抛异常导致逻辑中断。

















