循环条件必须能在某次迭代中变为false,且循环体内需修改条件变量;常见死循环因变量未更新;递减循环应配>=或==;避免浮点数直接比较,宜用Math.abs(a-b)。

关键在于循环条件必须能在某次迭代中变为 false,且循环体内要有能改变条件变量的逻辑。
确保循环变量在循环体内被修改
死循环最常见的原因是循环变量没有更新,导致条件始终为 true。比如用 i 控制循环,就必须在循环体里对 i 做增减操作。
- 错误写法:while (i —— i 永远不变,一直打印 0
- 正确写法:while (i —— 每次执行后 i 增加,最终跳出
检查初始值和终止条件是否合理
初始值与终止条件不匹配也会导致跳过循环或陷入死循环。比如从 10 开始递减却用 i 作条件,永远不满足;或者从 0 开始递增却用 i > 10,同样永不成立。
- 递减循环要配 >= 或 ==: int i = 5; while (i >= 0) { ... i--; }
- 避免浮点数直接比较:用 Math.abs(a - b) 替代 a != b,防止精度误差卡住
使用 break 提前退出(谨慎但必要)
当需要根据动态逻辑中断循环时,break 是合法手段,但应配合明确的退出条件,不能滥用。
立即学习“Java免费学习笔记(深入)”;
- 适合场景:读取用户输入直到输入 “quit”,或遍历集合找到目标就停止
- 示例:while (true) { String s = scanner.next(); if ("quit".equals(s)) break; process(s); }
- 注意:单独用 while (true) 必须有且仅有一个清晰的 break 路径,否则就是显式死循环
优先考虑 for 循环替代简单计数场景
如果循环次数确定或按固定步长变化,for 更安全——初始化、条件、更新三部分集中,不易遗漏。
- 等价转换:for (int i = 0; i 比 while 更难写出死循环
- while 更适合条件复杂、迭代步长不固定的情况,比如处理链表节点、等待外部事件等


















