我正在制作一个基于控制台的黑色插孔游戏,提示用户询问他/她是否想要:'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循环有点难看,但我只想在开始修改任何代码之前让这个程序处于工作状态。
答案 0 :(得分:0)
来自Scanner.close
的文档:
当扫描仪关闭时,如果源实现了Closeable接口,它将关闭其输入源。
在这里关闭扫描仪,这会导致System.In
关闭,这意味着您无法再读取任何输入:
scanner.close();
最好打开扫描仪一次并重复使用。只有在确定您已完成所有输入的读取或关闭应用程序时才关闭它。