java Scanner使用nextInt()和循环不断跳过输入whist

xyhw6mcr  于 2023-05-12  发布在  Java
关注(0)|答案(5)|浏览(139)

我使用while循环来确保输入到scanner对象的值是一个整数:

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中的输出,而不要求更多的输入。我要怎么阻止这一切?

6vl6ewon

6vl6ewon1#

scan.nextLine();

把这段代码放在你的catch块中,在你输入错误的情况下,使用非整数字符沿着留在缓冲区中的新行字符(因此,无限地打印catch sysout)。
当然,还有其他更简洁的方法来实现你想要的,但我想这需要在你的代码中进行一些重构。

ulydmbyx

ulydmbyx2#

使用以下内容:

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");
        }
    }
6vl6ewon

6vl6ewon3#

试试这个:

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();
    }
}
krugob8w

krugob8w4#

把这个放在循环的最后-

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();
        }
    }
pod7payv

pod7payv5#

我认为不需要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.

相关问题