首页 > 解决方案 > 尝试并捕获 InputMismatchException 处理。我想创建可以用控制台玩的井字游戏

问题描述

在这里找到了一个解决方案如何正确处理“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();
            }
        }

输出如下

这就是我在控制台中看到的

这不是我想看到的结果

标签: java

解决方案


如果nextInt()失败,它不会消耗失败的令牌......所以你会递归,立即nextInt()再次调用,这也会失败......所以你会再次递归,等等,永远。

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


推荐阅读