while循环内switch case接收字符串输入后无法继续运行问题
故障原因
- 核心问题出在
input()和menu()的输入读取逻辑中:如果你的代码使用Scanner.nextInt()读取整数输入,当用户输入字符串时,该方法会直接抛出InputMismatchException运行时异常。 - 你现有代码没有对该异常做捕获处理,异常抛出后会直接终止程序运行,导致while循环中断。
- 而输入22这类合法数字时,不会触发异常,只会进入switch的default分支输出错误提示,循环可以正常执行。
修复方案
首先修改输入读取逻辑,增加异常捕获和非法输入清理步骤,避免异常未处理导致程序崩溃,参考input()方法的修正实现:
import java.util.InputMismatchException; import java.util.Scanner; public int input() { Scanner scanner = new Scanner(System.in); int inputNum; while (true) { try { inputNum = scanner.nextInt(); return inputNum; } catch (InputMismatchException e) { // 输出输入错误提示 System.out.println("Felaktig inmatning! Ange ett giltigt nummer."); // 清空缓冲区残留的非法字符串,否则下次读取会重复触发异常 scanner.nextLine(); } } }
如果你的menu()方法中也存在读取用户整数输入的逻辑,也需要同步添加上述的异常捕获和缓冲区清理逻辑。
修改完成后,无论用户输入非数字字符串还是不在case分支内的数字,都会提示错误后回到while循环,允许用户重新输入,不会再出现程序直接停止的问题。
内容的提问来源于stack exchange,提问作者Carl
相关产品推荐
相关产品推荐

