gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:11:08 25 4
gpt4 key购买 nike

我正在制作一款基于控制台的二十一点游戏,提示用户询问他/她是否愿意:“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 的文档:

When a Scanner is closed, it will close its input source if the source implements the Closeable interface.

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

scanner.close();

最好打开扫描仪一次并重复使用。仅当确定您已读完所有输入或正在关闭您的应用程序时才将其关闭。

关于Java:用户输入 - 扫描仪 - 第二次输入后程序挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12016921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com