Java 尝试捕获输入不匹配异常处理。我想创建Tictatcoe游戏,可以用控制台玩

Java 尝试捕获输入不匹配异常处理。我想创建Tictatcoe游戏,可以用控制台玩,java,Java,在这里找到了一个如何正确处理InputMissatchException的解决方案,并在我的代码中实现了它。但结果仍然不是我所期望的 我必须扫描2个整数x,y坐标,然后将它们添加到数组中。尝试分别为x和y创建两个循环,但结果相同 private static void enterCoordinate(char[][] layoutMatrix) { int[] xy = new int[2]; boolean again = true; w

在这里找到了一个如何正确处理InputMissatchException的解决方案,并在我的代码中实现了它。但结果仍然不是我所期望的

我必须扫描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();
            }
        }
输出如下所示

这不是我想要看到的结果

如果nextInt失败,它不会使用失败的令牌。。。因此,您将递归,立即再次调用nextInt,这也将失败。。。所以你会再次出现,等等,永远

您可能应该在失败时调用scanner.next,以使用不是数字的令牌。仅仅添加这一行可能会解决问题,但我建议您也将其转换为while循环。。。我认为在这里递归没有任何好处,如果用户输入大量无效数字,仍然可能导致堆栈溢出。

如果nextInt失败,它不会使用失败的令牌。。。因此,您将递归,立即再次调用nextInt,这也将失败。。。所以你会再次出现,等等,永远


您可能应该在失败时调用scanner.next,以使用不是数字的令牌。仅仅添加这一行可能会解决问题,但我建议您也将其转换为while循环。。。我看不出在这里递归有任何好处,如果用户输入大量无效的数字,仍然可能导致堆栈溢出。

如何说,而它应该继续询问是否存在异常???@AnsaganIslamgali:我可能会编写一个方法,仅用于询问一个数字,其中包含一个带有返回scanner.nextInt的while true循环;在里面。因此,如果它捕获到一个异常,它将进入下一个迭代。但这要视情况而定——如果用户在y值上犯了错误,你想从一个新的x值开始,那么这种方法是行不通的。一般来说,whiletrue循环可能是一种方法,在成功时打破循环。如何说while应该继续询问是否存在异常???@AnsaganIslamgali:我可能会编写一个方法,仅用于询问一个数字,其中包含一个while true循环,返回scanner.nextInt;在里面。因此,如果它捕获到一个异常,它将进入下一个迭代。但这要视情况而定——如果用户在y值上犯了错误,你想从一个新的x值开始,那么这种方法是行不通的。一般来说,一个真正的循环可能是一条路,一旦成功就打破循环。