「炎码工坊」技术弹药已装填!
点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】
while
循环?假设你正在开发一个程序,需要让用户输入一个正整数,如果用户输入了负数或零,程序应该提示重新输入。这个问题看似简单,但如果没有循环语句,代码会变得冗长且难以维护:
// JDK 17 示例代码
import java.util.Scanner;
public class InputValidation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number;
// 第一次输入
System.out.print("请输入一个正整数: ");
number = scanner.nextInt();
// 如果输入无效,手动重复提示
if (number <= 0) {
System.out.print("输入无效,请重新输入: ");
number = scanner.nextInt();
}
// ... 如果用户再次输错,代码需要无限复制?
}
}
这段代码的问题显而易见:需要重复编写几乎相同的代码块,且无法预知用户会输错多少次。这时,while
循环就能派上用场!
while
循环的语法与流程图while (布尔表达式) {
// 循环体(当条件为 true 时重复执行的代码)
}
┌──────────────────┐
│ 条件为 true? │
└─────────┬────────┘
│ 是
▼
┌──────────────────┐
│ 执行循环体代码 │
└──────────────────┘
▼
┌──────────────────┐
│ 返回条件判断 │
└──────────────────┘
while
解决实际问题import java.util.Scanner;
public class InputValidation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number;
// 只要输入无效,就持续循环
while (true) {
System.out.print("请输入一个正整数: ");
number = scanner.nextInt();
if (number > 0) break;
System.out.println("输入必须大于 0!");
}
System.out.println("您输入的有效数字是: " + number);
}
}
public class SumCalculator {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while (i <= 100) {
sum += i;
i++;
}
System.out.println("1 到 100 的累加和为: " + sum);
}
}
while
vs for
vs do-while
特性 | while |
for |
do-while |
适用场景 | 循环次数未知 | 已知循环次数 | 至少执行一次循环体 |
代码简洁性 | 需手动管理初始化和迭代 | 初始化、条件、迭代集中书写 | 需注意条件判断在最后 |
潜在风险 | 可能因忘记更新条件导致死循环 | 灵活性稍低 | 若条件始终不满足,可能引发逻辑错误 |
示例 | 用户输入验证 | 遍历数组 | 菜单系统(至少显示一次) |
while
循环的常见错误int i = 0;
while (i < 5) {
System.out.println(i);
// 忘记 i++,i 永远为 0,循环无法退出
}
解决方法:确保循环体内有代码修改条件变量(如 i++
)。
int number = -1;
while (number > 0) {
// 这段代码永远不会执行!
}
解决方法:检查条件的初始值是否符合预期。
break
和 continue
int sum = 0;
int i = 0;
while (i <= 10) {
i++;
if (i % 2 == 0) continue; // 跳过偶数
sum += i;
}
System.out.println("奇数和为: " + sum);
while
循环?break
和 continue
实现复杂逻辑)。 do-while
对比:如果希望至少执行一次循环体,优先选择 do-while
。记住一句话:while
是「先判断后执行」,而 do-while
是「先执行后判断」。
最后留个小问题:
如果让你用
while
实现一个简单的「ATM 取款验证」(密码错误时允许重试 3 次),你会怎么写?
欢迎在评论区分享你的思路!
您已阅读完全文99%!缺少1%的关键操作:
加入「炎码燃料仓」
获得:
√ 开源工具红黑榜 √ 项目落地避坑指南
√ 每周BUG修复进度+1%彩蛋
(温馨提示:本工坊不打灰工,只烧脑洞)