扫描仪没有这样的元素异常

时间:2014-05-16 23:27:29

标签: java

得到了这段代码:

private void runGame() {
    boolean won = false;

    while(won == false) {
        System.out.println("DEBUG A");
        Player p = this.nextPlayer();
        System.out.println("DEBUG B");
        Scanner s = new Scanner(System.in);
        if(p.getPlayerType() == 0) {
            System.out.println("DEBUG C");
            // is Human
            BoardPrinter.printBoard(this.b);

            // Choose figure
            BoardPrinter.printFigureChoose(this.b.getFiguresFromPlayer(p.getSymbol()),p);

            int id = this.checkInput(1,this.b.getFiguresFromPlayer(p.getSymbol()).size(),s.nextInt());
            Figure f = this.b.getFiguresFromPlayer(p.getSymbol()).get(id - 1);

            // Choose move              
            ArrayList<Move> moves = b.checkMoves(f);
            BoardPrinter.printMoveChoose(moves,p);
            int moveID = this.checkInput(1,moves.size(),s.nextInt());
            Move m = moves.get(moveID - 1);

            // Execute the chosen move
            this.b.getCellAt(f.getLocation().getX(), f.getLocation().getY()).setSymbol(Symbol.EMPTY);
            f.setLocation(m.getTarget());
            this.b.getCellAt(m.getTarget().getX(), m.getTarget().getY()).setSymbol(p.getSymbol());

            // Check win conditions
            won = this.checkVictory(p);
            System.out.println("DEBUG D");
        }
        else {
            // KI stuff

            KI k = new KI(this.b,p,p.getPlayerType());
            Move m = k.think();     

            // Execute chosen move
            Figure f = this.b.getFigureAt(m.getStart());
            this.b.getCellAt(m.getStart().getX(), m.getStart().getY()).setSymbol(Symbol.EMPTY);
            f.setLocation(m.getTarget());
            this.b.getCellAt(m.getTarget().getX(), m.getTarget().getY()).setSymbol(p.getSymbol());
        }

        // Decomment this to get debug info
        //DebugPrinter.print(this.b);

        s.close();
    }
}

目前我收到了java.util.NoSuchElementException。是的,我知道我的意思,我google了很多。我还是不明白为什么会被抛出。此外,我只获得我的调试输出,直到&#34; C&#34;。

如果我将扫描仪初始化移到while循环之外,我就不会再获得该异常了。但是我确实感到困惑,代码停在Debug&#34; A&#34;没有别的。

我有两个人类玩家时遇到过这种情况。有趣的事实:第一个玩家将永远完美地工作。玩家可以看到董事会,选择一个图,选择一个移动并执行它。每当下一个while()运行开始并且第二个玩家考虑到它就会失败,因为我上面描述它取决于我的扫描仪初始化的位置。

有没有猜到问题是什么?非常感谢! :)

1 个答案:

答案 0 :(得分:3)

在while循环结束时关闭扫描仪。这意味着下次您尝试从扫描仪中读取内容时,您将获得NoSuchElementException