Java捕获InputMismatchException后如何继续执行while循环?
解决猜数字游戏异常后终止循环的问题
你的问题核心是try-catch块位置错误,且未处理Scanner的错误输入缓存,导致异常触发后直接跳出循环。以下是修复后的完整代码:
import java.util.InputMismatchException; import java.util.Scanner; public class GuessingGame { public static void main(String[] args) { System.out.println("Welcome!"); int min = 1; int max = 10; // 按需求调整为1-10的范围 // 修正随机数生成公式,确保能生成包含min和max的数值 int randomNumber = (int) (Math.random() * (max - min + 1)) + min; Scanner scanner = new Scanner(System.in); int currentAttempt = 1; int maxAttempts = 10; // 可按需调整最大猜测次数 while (currentAttempt <= maxAttempts) { System.out.println("Please enter your guess: "); try { int guessingNumber = scanner.nextInt(); if (guessingNumber < randomNumber) { System.out.println("Too small!"); } else if (guessingNumber > randomNumber) { System.out.println("Too big!"); } else { System.out.println("You win!"); break; // 猜中后直接退出循环 } currentAttempt++; } catch (InputMismatchException e) { System.out.println("Not a number - try again!"); scanner.next(); // 消费错误输入,避免无限触发异常 // 无效输入不消耗猜测次数 } } // 循环结束后判断是否耗尽次数 if (currentAttempt > maxAttempts) { System.out.println("Game over! The number was: " + randomNumber); } scanner.close(); // 关闭资源 } }
关键修复说明:
- 调整try-catch位置:将try-catch移入while循环内部,异常处理完成后循环会继续执行,不会直接终止程序。
- 清理错误输入缓存:在catch块中调用
scanner.next(),把用户输入的非数字字符从Scanner缓存中移除,否则下一次nextInt()会重复读取错误输入,导致无限循环。 - 修正随机数逻辑:原公式生成范围错误,调整后确保能覆盖1-10的所有数值。
- 添加猜中退出机制:原代码猜中后仍会继续循环,加入
break直接终止流程。 - 补充次数耗尽提示:循环结束后判断是否用完所有猜测机会,给出对应提示。
内容的提问来源于stack exchange,提问作者nostradamus
相关产品推荐
相关产品推荐

