在这里找到了一个解决方案,该方法如何正确处理“ InputMismatchException”并将其实现到我的代码中。但是结果仍然不是我期望的。
我必须扫描2个整数(x,y坐标)并将它们添加到数组中。试图分别为x和y创建两个循环,但是结果是相同的。
private static void enterCoordinate(char[][] layoutMatrix) {
int[] xy = new int[2];
boolean again = true;
while (again) {
try {
System.out.print("Enter the coordinates: ");
for (int i = 0; i < 2; i++) {
xy[i] = scanner.nextInt();
}
again = false;
}
catch (InputMismatchException e) {
System.out.println();
System.err.println("You should enter numbers!");
scanner.next();
}
}
输出如下所示
这不是我想要看到的结果
答案 0 :(得分:6)
如果nextInt()
失败,它不消耗失败的令牌……因此您将进行递归,立即再次调用nextInt()
,这也将失败。 ..因此,您将永远再次递归。
您可能应该在失败时致电scanner.next()
,以使用“不是数字的令牌”。仅添加该行可能会解决此问题,但我建议您也将此转换为while
循环...在这里重复执行不会有任何好处(并且如果用户输入很多个无效数字,仍然可能导致堆栈溢出。