我要用此代码完成的所有工作是检查用户输入的整数,然后给他们3次机会,如果输入的数据类型不正确,请再次输入。如果它们达到“ maxTries”标记,然后最终引发异常。

任何帮助将不胜感激。干杯。

    boolean correctInput = false;
    int returnedInt = 0;
    int count = 0;
    int maxTries = 3;

    Scanner kybd = new Scanner(System.in);

    while(!correctInput)
    {
        try
        {
            System.out.println("\nInput your int, you have had:" + count + " tries");
            returnedInt = kybd.nextInt();
            correctInput = true;

        }
        catch(InputMismatchException e)
        {
            System.out.println("That is not an integer, please try again..");
            if (++count == maxTries) throw e;

        }

    }
    return returnedInt;

最佳答案

发生这种情况的原因是因为未清除扫描仪的缓冲区。输入kybd.nextInt()已经用非整数填充,但是由于读取失败,因此实际上并没有摆脱它。因此,第二个循环将尝试再次拉出已经错误的填充缓冲区。

要解决此问题,可以在异常处理中使用nextLine()清除缓冲区。

        } catch (InputMismatchException e) {
            System.out
                    .println("That is not an integer, please try again..");
            kybd.nextLine(); //clear the buffer, you can System.out.println this to see that the stuff you typed is still there
            if (++count == maxTries)
                throw e;

        }


另一种选择是使用String s = kybd.nextLine()并对Integer进行解析,然后从中捕获异常。

09-10 09:32