扫描器in.hasNextInt()永远不会返回true

时间:2015-01-31 15:30:26

标签: java java.util.scanner do-while

我尝试了两种方法。两者都没有效果,我真的很想知道为什么。

display(text)只是System.out.println(text)

public int getMove() {

    int move = -2;
    display("It's your turn, pick a row [0-6] or [-1] for a hint: ");
    Scanner in = new Scanner(System.in);
    do {
        if (in.hasNextInt()) {
            move = in.nextInt();
        }
        if (move == -1) {
            display("How much time can I use?");
            move = -3;
            do {
                if (in.hasNextInt()) {
                    move = in.nextInt();
                }
            } while (move == -3);
            in.close();
            return -1 * move;
        }
    } while (move < -1);
    in.close();
    return move;

}

此代码不接受任何输入(例如,当我输入5时,它不会退出do-while循环。)

当我改变时

        if (in.hasNextInt()) {
            move = in.nextInt();
        }

为:

            move = in.nextInt();

它会抛出java.util.NoSuchElementException

为什么会这样?

1 个答案:

答案 0 :(得分:1)

这将跳过读取任何非整数

的内容
 if (in.hasNextInt()) {
        move = in.nextInt();
    }    

所以当你输入&#34; abcd&#34;它将永远留在缓冲区。

在循环结束时添加in.nextLine()到&#34;跳过&#34;输入无效。