while循环
while循环是先判断后执行的循环结构。
while循环语法
基本格式
Java
while (条件) {
// 循环体
}
// 执行流程:
// 1. 判断条件
// 2. 条件为true:执行循环体,回到步骤1
// 3. 条件为false:结束循环
基本示例
Java
int i = 1;
while (i <= 5) {
System.out.println(i);
i++;
}
// 输出:1, 2, 3, 4, 5
while执行流程
先判断后执行
Java
int i = 10;
while (i < 5) { // 先判断,i=10,条件为false
System.out.println(i); // 不执行
}
// while可能一次都不执行(条件初始为false)
执行过程示例
Java
int i = 1;
while (i <= 3) {
System.out.println(i);
i++;
}
// 执行过程:
// 1. i=1, i<=3 ? true → 输出1, i++
// 2. i=2, i<=3 ? true → 输出2, i++
// 3. i=3, i<=3 ? true → 输出3, i++
// 4. i=4, i<=3 ? false → 结束循环
while循环应用
不确定次数循环
Java
// 读取数据直到结束
Scanner scanner = new Scanner(System.in);
String input;
while (scanner.hasNextLine()) {
input = scanner.nextLine();
process(input);
}
// 处理队列元素
while (!queue.isEmpty()) {
process(queue.poll());
}
条件满足循环
Java
int balance = 1000;
int price = 100;
while (balance >= price) {
balance -= price;
System.out.println("购买成功,余额:" + balance);
}
// 输出:购买成功直到余额不足
游戏循环
Java
boolean playing = true;
while (playing) {
render();
update();
if (checkGameOver()) {
playing = false;
}
}
计数循环
Java
int count = 0;
int i = 1;
while (i <= 100) {
if (i % 2 == 0) {
count++;
}
i++;
}
// count = 50(偶数个数)
累加求和
Java
int sum = 0;
int i = 1;
while (i <= 100) {
sum += i;
i++;
}
// sum = 5050
while循环控制
break跳出循环
Java
int i = 1;
while (i <= 10) {
if (i == 5) {
break; // 跳出循环
}
System.out.println(i);
i++;
}
// 输出:1, 2, 3, 4
continue跳过当前
Java
int i = 0;
while (i < 5) {
i++;
if (i == 3) {
continue; // 跳过本次
}
System.out.println(i);
}
// 输出:1, 2, 4, 5(跳过3)
无限循环与退出
Java
while (true) { // 无限循环
String input = getInput();
if ("exit".equals(input)) {
break; // 输入exit退出
}
process(input);
}
while注意事项
避免无限循环
Java
int i = 1;
// 错误:忘记更新变量,无限循环
// while (i <= 5) {
// System.out.println(i);
// // 缺少i++
// }
// 正确:循环体内更新变量
while (i <= 5) {
System.out.println(i);
i++;
}
条件初始为false
Java
int i = 10;
while (i < 5) {
System.out.println(i); // 不执行
}
// while先判断,条件初始为false则不执行
循环变量初始化
Java
// 循环变量必须先初始化
int i = 0; // 初始化
while (i < 10) {
System.out.println(i);
i++;
}
// 未初始化会报错
// while (j < 10) { // 错误:j未初始化
// }
while与for对比
使用场景对比
| 特性 | while | for |
|---|---|---|
| 判断时机 | 先判断后执行 | 先判断后执行 |
| 循环次数 | 不确定次数 | 确定次数 |
| 初始化 | 循环前初始化 | 循环内初始化 |
| 更新 | 循环体内更新 | 循环头更新 |
| 适用场景 | 条件循环、不确定次数 | 计数循环、遍历 |
Java
// while:不确定次数
while (hasMoreData()) {
process();
}
// for:确定次数
for (int i = 0; i < 100; i++) {
process();
}
等价转换
Java
// while循环
int i = 0;
while (i < 10) {
System.out.println(i);
i++;
}
// 等价的for循环
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
while嵌套
嵌套while循环
Java
int i = 1;
while (i <= 3) {
int j = 1;
while (j <= 3) {
System.out.println(i + ", " + j);
j++;
}
i++;
}
while与for嵌套
Java
int row = 0;
while (row < 5) {
for (int col = 0; col < 5; col++) {
System.out.print("*");
}
System.out.println();
row++;
}
while常见应用
输入验证
Java
Scanner scanner = new Scanner(System.in);
int age;
System.out.print("请输入年龄:");
age = scanner.nextInt();
while (age < 0 || age > 150) {
System.out.print("年龄无效,请重新输入:");
age = scanner.nextInt();
}
System.out.println("年龄:" + age);
数据处理
Java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Iterator<Integer> it = numbers.iterator();
while (it.hasNext()) {
Integer num = it.next();
if (num % 2 == 0) {
it.remove(); // 删除偶数
}
}
等待条件满足
Java
while (!isReady()) {
try {
Thread.sleep(100); // 等待100毫秒
} catch (InterruptedException e) {
break;
}
}
// 条件满足后继续
while最佳实践
条件清晰的用while
Java
// 条件驱动:while更自然
while (!queue.isEmpty()) {
process(queue.poll());
}
// 计数驱动:for更简洁
for (int i = 0; i < queue.size(); i++) {
process(queue.get(i));
}
确保条件能变为false
Java
int i = 1;
// 正确:条件最终为false
while (i <= 10) {
System.out.println(i);
i++; // 确保i递增
}
// 错误:条件永远为true
// while (true) {
// System.out.println("无限循环");
// // 缺少退出条件
// }
简洁的条件表达式
Java
// 简洁条件
while (hasMore) { }
// 不推荐复杂条件在while头
// while (a > 0 && b > 0 && c > 0 && d > 0) { }
// 建议提取为方法
while (allPositive(a, b, c, d)) { }
要点总结
- while(条件) {循环体}:先判断后执行
- 条件为true执行,false结束
- 可能一次都不执行(条件初始为false)
- 循环体内必须更新条件变量
- 避免忘记更新导致无限循环
- 适合不确定次数的循环
- 条件驱动循环用while
- 计数循环用for更简洁
- 循环变量需在循环前初始化
- break跳出,continue跳过
- while(true)为无限循环,需break退出
- 确保条件最终能变为false
📝 发现内容有误?点击此处直接编辑