while循环适用于次数不确定但结束条件明确的场景,需初始化变量、更新状态并确保条件最终为false;其先判后执,条件为true时执行循环体,首次为false即退出;典型应用包括读取用户输入、遍历链表、等待外部状态变化等。

Java 中 while 循环适合处理“次数不确定、但结束条件明确”的场景,关键在于循环前初始化变量、循环中更新状态、循环条件始终可判断且最终能为 false。
while 循环的基本结构和执行逻辑
while 语句先检查条件表达式,为 true 才执行循环体;每次执行完循环体后再次判断条件。只要条件为 true,就持续执行。一旦条件首次为 false,立即跳出循环,不执行后续循环体。
- 语法:while (布尔表达式) { 循环体语句 }
- 必须确保循环体内有修改条件相关变量的语句,否则容易陷入死循环
- 条件表达式不能是常量 true(除非有意设计无限循环并配合 break)
读取用户输入直到满足特定条件
这是典型未知次数的场景:你不知道用户要输几次,只知道当输入 “quit” 或数字小于 0 时停止。
Scanner scanner = new Scanner(System.in);
String input;
while (!(input = scanner.nextLine()).equals("quit")) {
System.out.println("你输入了:" + input);
}
System.out.println("退出程序");
注意这里用赋值表达式结合 equals 判断,避免空指针(实际中建议加 null 检查)。更安全写法是 "quit".equals(input)。
遍历链表或自定义数据结构
比如处理单向链表节点,无法通过下标访问,只能靠 next 指针推进,节点数完全未知。
ListNode current = head;
while (current != null) {
System.out.println(current.val);
current = current.next; // 更新状态,走向下一个节点
}
循环条件是 current != null,退出时机自然由链表末尾的 null 决定,无需预先知道长度。
等待外部状态变化(如文件就绪、网络响应)
某些场景下需轮询等待某个标志位或资源就绪,例如监听一个 volatile 布尔变量:
private volatile boolean ready = false;
// 另一个线程设置 ready = true
while (!ready) {
try {
Thread.sleep(100); // 避免忙等,降低 CPU 占用
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
break;
}
}
System.out.println("已就绪,继续执行");
这种用法要谨慎:避免无休止空转;加入延时或让出 CPU;考虑用更高级机制(如 CountDownLatch、BlockingQueue)替代。
不复杂但容易忽略的是条件更新和边界判断——只要保证“每次循环都朝终止条件靠近”,while 就能稳稳应对各种动态迭代需求。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











