用while(true)实现控制台持续读取,统一用nextline()防漏读,通过输入特定字符串(如"done")或异常捕获(numberformatexception)安全退出并提示错误。

用 while 循环配合 Scanner 类实现控制台持续读取,核心是让程序不退出、反复等待用户输入,直到满足某个结束条件(比如输入特定字符串或遇到异常)。
基础结构:用 while(true) 保持循环
最直接的方式是用无限循环 while(true),内部通过 break 或 return 控制退出时机。每次循环中调用 scanner.nextLine() 等方法读取一行输入。
- 避免用
scanner.next()读字符串后紧跟nextLine(),否则会跳过换行导致“漏读” - 推荐统一使用
nextLine(),它读取整行(包括空格),也更符合用户对“输入一行”的直觉 - 如果读的是数字,先用
nextLine()获取字符串,再用Integer.parseInt()转换,便于捕获格式错误
安全退出:设定明确的终止条件
不能让程序永远卡在输入上,必须有可预期的退出方式。常见做法有:
- 约定输入
"quit"、"exit"或"q"时跳出循环 - 输入空行(
line.trim().isEmpty())视为结束 - 读取到特定数字(如 -1)作为哨兵值
- 捕获
System.in关闭信号(如 Ctrl+D / Ctrl+Z),靠hasNextLine()检测
防错处理:避免因异常中断循环
Scanner 在输入流关闭或格式错误时可能抛异常,应主动兜底:
- 用
try-catch包裹nextLine()或解析逻辑,捕获InputMismatchException、NumberFormatException - 若用户输错,打印提示后
continue进入下一轮,而不是让程序崩溃 - 在循环外关闭
Scanner(通常不强制关System.in),或用 try-with-resources 管理(适用于文件等可关闭资源)
完整示例:支持数字累加并随时退出
以下代码读取整数并累加,输入 "done" 结束:
Scanner sc = new Scanner(System.in);
int sum = 0;
System.out.println("请输入整数(输入 'done' 结束):");
while (true) {
String line = sc.nextLine().trim();
if ("done".equalsIgnoreCase(line)) {
break;
}
try {
int num = Integer.parseInt(line);
sum += num;
System.out.println("当前和:" + sum);
} catch (NumberFormatException e) {
System.out.println("输入无效,请输入整数或 'done'。");
}
}
System.out.println("最终结果:" + sum);
sc.close();











