1

我正在使用 while 循环来确保输入到扫描仪对象的值是一个整数,如下所示:

while (!capacityCheck) {
        try {
            System.out.println("Capacity");
            capacity = scan.nextInt();
            capacityCheck = true;
        } catch (InputMismatchException e) {
            System.out.println("Capacity must be an integer");
        }
    }

但是,如果用户没有输入整数,当它应该返回并接受另一个输入时,它只会重复打印“Capacity”,然后在 catch 中输出,而不要求更多输入。我该如何阻止这个?

4

5 回答 5

3
scan.nextLine();

将这段代码放入您的catch块中,以在输入错误的情况下使用非整数字符以及留在缓冲区中的换行符(因此,无限打印 catch sysout)。

当然,还有其他更简洁的方法可以实现您想要的,但我想这需要在您的代码中进行一些重构。

于 2013-03-20T05:35:24.170 回答
0

使用以下内容:

while (!capacityCheck) {
        System.out.println("Capacity");
        String input = scan.nextLine();
        try {
            capacity = Integer.parseInt(input );
            capacityCheck = true;
        } catch (NumberFormatException e) {
            System.out.println("Capacity must be an integer");
        }
    }
于 2013-03-20T05:35:24.977 回答
0

尝试这个 :

while (!capacityCheck) {
    try {
        System.out.println("Capacity");
        capacity = scan.nextInt();
        capacityCheck = true;
    } catch (InputMismatchException e) {
        System.out.println("Capacity must be an integer");
        scan.nextLine();
    }
}
于 2013-03-20T05:36:34.213 回答
0

我认为不需要 try/catch 或者capacityCheck因为我们可以访问该方法hasNextInt()- 它检查下一个令牌是否是 int。例如,这应该做你想要的:

    while (!scan.hasNextInt()) { //as long as the next is not a int - say you need to input an int and move forward to the next token.
        System.out.println("Capacity must be an integer");
        scan.next();
    }
    capacity = scan.nextInt(); //scan.hasNextInt() returned true in the while-clause so this will be valid.
于 2013-03-20T05:40:02.877 回答
0

尝试将其放在循环的末尾 -

scan.nextLine();

或者最好把它放在 catch 块中。

    while (!capacityCheck) {
        try {
            System.out.println("Capacity");
            capacity = scan.nextInt();
            capacityCheck = true;
        } catch (InputMismatchException e) {
            System.out.println("Capacity must be an integer");
            scan.nextLine();
        }
    }
于 2013-03-20T05:33:24.097 回答