Java中while循环内嵌try-catch引发无限循环问题求助
解决Scanner输入非数值导致的无限循环问题
问题原因
当输入非整数内容时,Scanner.nextInt()会抛出InputMismatchException,但无效的输入字符会残留在Scanner的输入缓冲区中。后续循环再次调用nextInt()时,会直接读取到这些残留的无效内容,反复触发异常,从而陷入无限循环。
修复方案
在catch块中添加scanner.nextLine(),清空输入缓冲区里的无效内容,确保下一次输入读取操作能获取到新的用户输入。同时,建议明确捕获InputMismatchException而非泛型Exception,避免捕获无关异常。
修改后的完整代码
import java.util.Scanner; import java.util.InputMismatchException; public class Test { public static void main(String[] args) { Scanner s = new Scanner(System.in); int digit = 0; String playerNumber; while (digit <= 0) { System.out.println("How many digit you want to guess?"); try { digit = s.nextInt(); if (digit <= 0) { System.out.println("Please enter a positive number."); continue; } char[][] users = new char[digit][1]; do { System.out.println("Please enter " + digit + " digit/s numbers."); playerNumber = s.next(); if (playerNumber.length() == digit) { System.out.println("Player number : " + playerNumber); for (int i = 0; i < digit; i++) { users[i][0] = playerNumber.charAt(i); } } else { System.out.println("You must enter a " + digit + " digit number."); } } while (playerNumber.length() != digit); } catch (InputMismatchException e) { System.out.println("Enter numbers only"); digit = 0; s.nextLine(); // 清空输入缓冲区的无效内容 } } } }
额外优化说明
- 新增了对
digit <= 0的判断提示,当用户输入负数或0时,直接给出明确提示并重新循环,无需进入后续逻辑。 - 捕获特定的
InputMismatchException,避免捕获其他意外异常(如IO异常),增强代码健壮性。
内容的提问来源于stack exchange,提问作者JavaScript
相关产品推荐
相关产品推荐

