while循环适用于结束条件明确但次数不确定的任务,需确保循环条件可变且终为false,避免死循环;使用时应先判空再访问成员,合理运用break和continue。

while 循环适合处理“次数不确定、但结束条件明确”的任务,核心是先判断条件,再执行循环体,关键在于条件能随循环推进而变化,最终趋于 false。
条件必须可变且终将为 false
如果条件始终为 true(比如 while (true) 又没 break),就会死循环。正确做法是让条件依赖的变量在循环体内被修改:
- 读取用户输入直到输入 "quit":
String input = scanner.nextLine();<br>while (!"quit".equals(input)) {<br> System.out.println("处理: " + input);<br> input = scanner.nextLine(); // 更新 input<br>} - 处理链表节点直到末尾:
Node current = head;<br>while (current != null) {<br> process(current.data);<br> current = current.next; // 向后移动指针<br>}
避免常见陷阱:先检查再使用
尤其涉及对象或数组时,要防止空指针或越界。条件判断顺序很重要:
- ✅ 正确(先判非空,再调用方法):
while (node != null && node.getValue() > 0) { ... } - ❌ 错误(可能触发 NullPointerException):
while (node.getValue() > 0 && node != null) { ... }(Java 中 && 左侧先执行,node 为 null 时直接报错)
配合 break 和 continue 灵活控制流程
当单一条件不足以描述全部退出逻辑时,可在循环体内用 break 提前终止,或用 continue 跳过当前迭代:
立即学习“Java免费学习笔记(深入)”;
- 查找第一个偶数并停止:
int i = 0;<br>while (i < numbers.length) {<br> if (numbers[i] % 2 == 0) {<br> System.out.println("找到偶数: " + numbers[i]);<br> break;<br> }<br> i++;<br>} - 跳过负数只处理正数:
while (scanner.hasNextInt()) {<br> int n = scanner.nextInt();<br> if (n < 0) continue;<br> sum += n;<br>}
与 do-while 的选择:是否至少执行一次
如果任务要求“无论如何先做一次,再看还做不做”,就用 do-while。比如菜单交互,总得显示一次选项:
-
int choice;<br>do {<br> showMenu();<br> choice = scanner.nextInt();<br> if (choice == 1) doTask();<br>} while (choice != 0); - 而普通 while 更常用在“满足条件才开始”的场景,如等待有效输入、遍历容器、轮询状态等。


















