Java:用户输入 - 扫描程序 - 程序在第二次输入后挂起

时间:2012-08-18 07:52:52

标签: java input user-input java.util.scanner

我正在制作一个基于控制台的黑色插孔游戏,提示用户询问他/她是否想要:'h'表示打击,'s'表示停留,或'q'表示退出。我正在使用Scanner类在while循环中接收来自用户的输入。代码在第一次提示用户并接收输入时工作,但它从不第二次工作。在第二个提示出现后,无论用户输入什么,程序只是等待,即使它仍然在运行,也什么都不做。我一直试图让这个工作几个小时,并阅读了Java Docs,许多SO问题等。以下是相关代码:

public void gameloop() {
    while (thedeck.cards.size() >= 1) {
        prompt();
    }
}

public void prompt() {
    String command = "";
    Boolean invalid = true;
    System.out.println("Enter a command - h for hit, s for stay, q for quit: ");

    Scanner scanner = new Scanner(System.in);

    while (invalid) {
        if (scanner.hasNext()) {
            command = scanner.next();
            if (command.trim().equals("h")) {
                deal();
                invalid = false;
            } else if (command.trim().equals("s")) {
                dealerturn();
                invalid = false;
            } else if (command.trim().equals("q")) {
                invalid = false;
                System.exit(0);
            } else {
                System.out.println("Invalid input");
                scanner.next();
            }
        }
    }
    scanner.close();
}

以下是代码输出的内容:

Dealer has shuffled the deck.
Dealer deals the cards.
Player's hand:
Three of Clubs: 3
Five of Clubs: 5
Enter a command - h for hit, s for stay, q for quit: 
h
Dealer deals you a card:
Player's hand:
Three of Clubs: 3
Five of Clubs: 5
Queen of Hearts: 10
Enter a command - h for hit, s for stay, q for quit: 
h (Program just stops here, you can keep entering characters, 
but it does nothing even though the code is still running)

任何关于出了什么问题的想法都将不胜感激。我也意识到while循环有点难看,但我只想在开始修改任何代码之前让这个程序处于工作状态。

1 个答案:

答案 0 :(得分:0)

来自Scanner.close的文档:

  

当扫描仪关闭时,如果源实现了Closeable接口,它将关闭其输入源。

在这里关闭扫描仪,这会导致System.In关闭,这意味着您无法再读取任何输入:

scanner.close();

最好打开扫描仪一次并重复使用。只有在确定您已完成所有输入的读取或关闭应用程序时才关闭它。