java - Java 扫描器 - 循环直到用户提供正确的输入
问题描述
代码的期望行为如下: 要求用户输入。当他们提供不正确的输入时,他们会再次被询问,直到他们最终输入一个有效值。
这是一个最小的例子:
int[] t = new int[2];
Scanner scanner = new Scanner(System.in);
while (true) {
try {
int k = scanner.nextInt();
System.out.println(t[k]);
break;
} catch (Exception e) {
System.out.println(e);
}
}
scanner.close();
(1)如果用户键入“-1”,则在他们必须再次键入之后打印相应的异常(即“java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 2”)(正如预期的那样) .
(2)但是,如果用户键入“a”,相应的异常(即“java.util.InputMismatchException”)会被无休止地打印出来。
那么,你能解释一下 Scanner 类为什么/如何导致问题,以及如何解决它?
解决方案
(我在查看问题时想出了答案。也许这可以帮助其他人)
由于该指令引发了异常
int k = scanner.nextInt();
,因此该指令未完成,因此“System.in”的“下一个”元素仍然相同(在示例(2)中为“a” )。因此,它无休止地引发相同的异常。
为了解决这个问题,我只需要添加catchscanner.nextLine();
语句,这会导致程序要求新的用户输入。
推荐阅读
- android - 无法将 Argumant 类型 ImageProvider 分配给 imageprovider
- sql - 无法在 powershell 脚本中的 SQL 查询中转义表名中的 $
- javascript - 表的 rowSelectionChange oEvent 中缺少 selectedIndex
- javascript - 根据下拉列表和单选选择切换一组 div 的条件
- python-3.x - 如何从我的 df 中排除 A 列和 B 列中前 4 位小数相等的行?
- html - 在同一页面上制作两种不同的列布局
- wine - 在 Linux 上使用 Wine 包装 Windows dll
- php - Laravel 将数据添加到集合中
- python - IndexError:元组索引超出范围,尝试在 multiprocessing.Pool 中传递二维数组时
- c# - 从动态日期字段中删除月份和日期