我正在制作一个基于主机的黑杰克游戏,提示用户是否想:"h"表示命中,"s"表示停留,或"q"表示退出。我正在使用Scanner类在while循环中接收来自用户的输入。该代码在第一次提示用户并接收输入时起作用,但在第二次时永远不会起作用。第二个提示出现后,无论用户键入什么,程序都会等待,即使它仍在运行,也不会执行任何操作。几个小时以来,我一直在努力让它发挥作用,并阅读了Java文档、许多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循环有点难看,但我只想在开始修改任何代码之前让这个程序处于工作状态。
来自Scanner.close
:的文档
当扫描仪关闭时,如果源实现Closeable接口,它将关闭其输入源。
在这里,您关闭扫描仪,这将导致System.In
关闭,这意味着您无法读取更多输入:
scanner.close();
最好打开扫描仪一次并重复使用。只有在确定已完成读取所有输入或正在关闭应用程序时才关闭扫描仪。