Java中while循环内try-catch失效:输入字符串触发无限异常求助
嘿,我来帮你搞定这个问题!
解决Java while循环中try-catch处理
nextInt()异常的无限循环问题 首先得搞懂为啥会陷入无限循环:当你输入字符串时,Scanner.nextInt() 没法解析这个非整数输入,会抛出InputMismatchException,但这个错误的输入还留在Scanner的输入缓冲区里——下一次循环时,nextInt()又会读到同一个错误输入,再次抛出异常,就这么反复循环下去了。
核心解决思路就是:捕获异常后,把缓冲区里的错误输入给“消费”掉,让下一次循环能正常接收新的输入。下面给你两种实用的解决方法:
方法一:用next()清空错误输入
在catch块里调用scanner.next(),把无法解析的错误字符串从缓冲区中取出,这样下一次循环就能等待用户的新输入了。示例代码如下:
import java.util.InputMismatchException; import java.util.Scanner; public class InputTest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int targetNum = 0; boolean isInputValid = false; while (!isInputValid) { try { System.out.print("请输入一个整数:"); targetNum = scanner.nextInt(); isInputValid = true; // 输入正确,标记为有效,退出循环 System.out.println("你输入的整数是:" + targetNum); } catch (InputMismatchException e) { System.out.println("输入错误!请输入一个有效的整数。"); scanner.next(); // 关键步骤:把缓冲区里的错误字符串消费掉 } } scanner.close(); } }
方法二:先读字符串再转整数
另一种更灵活的思路是:先把输入当作整行字符串读进来,再尝试转换成整数,这样就不会让错误输入滞留在缓冲区里。如果用户输入了带空格的内容,还可以先做个修剪处理,让程序更健壮。示例代码:
import java.util.Scanner; public class InputTest2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int targetNum = 0; boolean isInputValid = false; while (!isInputValid) { System.out.print("请输入一个整数:"); String inputContent = scanner.nextLine(); // 读取整行输入 try { targetNum = Integer.parseInt(inputContent.trim()); // 修剪前后空格再转换 isInputValid = true; System.out.println("你输入的整数是:" + targetNum); } catch (NumberFormatException e) { System.out.println("输入错误!请输入一个有效的整数。"); } } scanner.close(); } }
这个方法还能处理用户输入空行、前后带空格的情况,适用性更广~
内容的提问来源于stack exchange,提问作者Atul Mehla
相关产品推荐
相关产品推荐

