Java Scanner不期望下一个输入,忽略nextLine()

时间:2017-04-23 15:57:39

标签: java java.util.scanner

我不太了解扫描仪的行为。我想先输入一个int,然后在while循环中输入下一行输入。但是在第一次输入后,我得到一个ArrayOutOfBoundsException,如下所示。它只是忽略了我想输入下一行。唯一的解决方案是当我输入int和用一行中的空格分隔的新行时,但这不是我想要的,因为在这一点上,用户不知道,输入后输入什么第一个int。

Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt() - 1;
        logic.setGameField(games.get(i).getGameField());

//      scanner.reset(); //what does that do?

        view.displayField(logic.getCompleteGameField(), logic.getGameSize(), logic.getCompleteGameSize());

        double time = System.currentTimeMillis();


        while (!logic.gameIsFinished()) {
            System.out.println("Spalte Reihe Zeichen: X/*");

            String s = scanner.nextLine();

            char[] tmp = s.toCharArray(); 

            //just for testing
            System.out.println(s.length()); //outputs: 0
            System.out.println(tmp.length); //outputs: 0
            for (int j = 0; j < tmp.length; j++) {
                System.out.print(tmp[j] + " " + j);     
            }
            System.out.println();

            logic.setSingleField(tmp[1] - CHAR_TO_INT_OFFSET_ROW, tmp[0] - CHAR_TO_INT_OFFSET_COLUMN, tmp[2]); //throws as expected ArrayIndexOutOfBoundsException

1 个答案:

答案 0 :(得分:1)

这是因为Scanner.nextInt()不会将您带到下一行。此时,您仍处于当前输入行。您可以做的是在Scanner.nextInt()之后调用另外的Scanner.nextLine():

int i = scanner.nextInt() - 1;
scanner.nextLine();
logic.setGameField(games.get(i).getGameField());