public static void main(String[] args) {
Scanner console = new Scanner(System.in);
Random r = new Random();
intro();
int numGames = 0;
int numGuesses = game(console, r);
int max = max(numGuesses);
String again = "";
while (again.startsWith("y") || again.startsWith("Y")) {
game(console, r);
System.out.println("Do you want to play again?");
again = console.next();
numGames++;
}
stats(numGames, numGuesses, max);
}
这是我的方法main中的代码,代码应该调用其他方法来编写带数字的猜谜游戏。我设置了我的while循环,以便它将运行游戏,并且在游戏运行后,它将询问用户他/她是否想再次玩游戏。然后,用户将键入任何内容,如果他/她键入的字符串以" y"或者" Y"然后游戏将再次播放。 (还有别的,假设用户没有输入除" n"或" N"以外的任何其他字母,那么程序将转到方法调用stats();)
问题是,在游戏运行一次并且用户猜对了之后,程序甚至没有要求再次玩,它只是直接进入统计数据();方法调用。我究竟做错了什么?如何修复它以便它会要求用户再次播放并且只要用户键入任何以" y"开头的单词就会继续播放。或" Y"?
答案 0 :(得分:5)
again
是一个空字符串,因此根本不会执行while。
您正在寻找do .. while
构造。
答案 1 :(得分:2)
您正在将again
初始化为空字符串。因此当它到达你的while
时,它也不会从它们开始。您需要改为使用do
/ while
循环。
do {
// Same content as your other loop
} while (again.startsWith("y") || again.startsWith("Y"))
这将允许您在尝试循环之前设置again
变量。
答案 2 :(得分:0)
由于again
只是一个循环范围变量,我会使用for循环:
for (String again = "y"; again.toLowerCase().startsWith("y"); again = console.next()) {
game(console, r);
numGames++;
System.out.println("Do you want to play again?");
}
也增加了案例检查的简化。
答案 3 :(得分:0)
看起来console.next()
生成的既不是'y'也不是'Y'。您是否尝试在循环结束前打印again
?尝试转储内容(而不仅仅是字符,而是读取值的长度。
请参阅How do you accept 1 or 2 string variable with console.next() in shortest code, Java?