在输入数字之前要求输入?

时间:2016-03-06 17:38:15

标签: java input integer java.util.scanner

do{
    try{
        System.out.println("Please enter the publication year :");
        year=keyboard.nextInt();
        doneYear=true;
    } catch(InputMismatchException e) {
        System.out.println("Please enter a number.");
    }
} while(!doneYear);

这不起作用。一旦我遇到第一个异常,它就无限循环。

1 个答案:

答案 0 :(得分:1)

nextXYZ()方法(在您的情况下具体为nextInt())如果失败并使用InputMismatchException,则不会使用令牌。如果发生这种情况,您需要使用当前的,错误的令牌才能继续并获得一个新令牌。否则,你只是继续重新评估,重新输入相同的输入,导致你观察到的无限循环:

do {
    try {
        System.out.println("Please enter the publication year :");
        year = keyboard.nextInt();
        doneYear = true;
    } catch (InputMismatchException ignore) {
        keyboard.nextLine(); // consume and ignore current input
        System.out.println("Please enter a number.");
    }
} while (!doneYear);