发布于2026-07-05 阅读(0)
扫一扫,手机访问
Ja va循环控制流是实现程序自检逻辑最自然的手段,while适用于输入校验,for适用于批量配置检查,do-while适用于需至少执行一次的连接类自检。

程序自检,说白了就是让代码在运行时自己检查自己——输入合不合法?资源通不通?配置齐不齐?发现问题了就重试、提醒甚至降级处理。这种“反复判断、条件退出”的套路,简直就是为 while、for 量身定做的。所以,用循环控制流来实现自检,既顺手又自然。
用户输入校验,几乎每个交互程序都会碰到。比如让用户输入一个 1 到 100 的整数,或者一个非空的用户名。while 循环恰好擅长这种“不达目的不罢休”的场景——它会一直等待,直到拿到合法的输入才放行。
例如:要求用户输入 1–100 之间的整数,最多试 3 次
int attempts = 0;
Scanner sc = new Scanner(System.in);
int score = -1;
while (score 100 && attempts System.out.print("请输入1-100的分数: ");
if (sc.hasNextInt()) {
score = sc.nextInt();
if (score 100) System.out.println("超出范围,请重试");
} else {
System.out.println("输入不是数字,请重试");
sc.next(); // 清掉非法 token
}
attempts++;
}
if (attempts == 3) {
System.out.println("尝试次数超限,程序退出");
return;
}
如果你的程序需要加载一堆外部配置——数据库URL、端口、超时时间什么的,那在启动时用 for 循环挨个检查,是最省心的做法。
示例:检查必要配置项
String[] requiredKeys = {"db.url", "db.user", "db.password"};
List
for (String key : requiredKeys) {
if (props.getProperty(key) == null || props.getProperty(key).trim().isEmpty()) {
missing.add(key);
}
}
if (!missing.isEmpty()) {
throw new IllegalStateException("缺少必需配置: " + missing);
}
有些自检操作,无论如何得先跑一次再说——比如尝试连接数据库、读取本地缓存。这时候 do-while 就派上用场了,它先执行一遍循环体,再判断要不要重试,正好对路。
示例:带延迟的数据库连接重试
Connection conn = null;
int retry = 0;
do {
try {
conn = DriverManager.getConnection(url, user, pwd);
} catch (SQLException e) {
// 记录日志,不做抛出
}
if (conn == null && retry < 3) {
Thread.sleep(200 * (long) Math.pow(2, retry)); // 指数退避
retry++;
}
} while (conn == null && retry < 3);
if (conn == null) throw new RuntimeException("数据库连接失败");
在单个循环里,有时候需要跳过某些项,有时候又得立刻终止。break 用来处理致命错误——发现关键配置缺失就马上退出;continue 则用来跳过非核心问题,继续检查下一个。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8