while循环不会重复
While loop won't repeat
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 循环,这样它将 运行 游戏,并且在游戏 运行 之后,它会询问用户是否 he/she 想再次玩。然后用户可以输入任何内容,如果字符串 he/she 类型以 "y" 或 "Y" 开头,那么游戏将再次进行。 (除此之外,假设用户没有键入 "n" 或 "N" 以外的任何其他字母,那么程序将转到方法调用 stats(); )
问题是,在游戏运行一次并且用户猜对之后,程序甚至没有要求再玩一次,直接进入stats();方法调用。我究竟做错了什么?我该如何修复它,以便它会要求用户再次播放,并且只要用户键入任何以 "y" 或 "Y"?
开头的单词,它就会继续播放
您正在将 again
初始化为空字符串。因此,当它到达您的 while
时,它不会以任何一个开头。您需要使用 do
/while
循环。
do {
// Same content as your other loop
} while (again.startsWith("y") || again.startsWith("Y"))
这将允许您在尝试循环之前设置 again
变量。
again
在第一次检查时是一个空字符串,所以根本不执行 while。
您正在寻找 do .. while
结构。
由于 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?");
}
也添加了对大小写检查的简化。
看起来 console.next()
生成的既不是 'y' 也不是 'Y'。您是否尝试过在循环结束之前打印 again
是什么?尝试转储内容(不仅是字符,还有读取值的长度。
见How do you accept 1 or 2 string variable with console.next() in shortest code, Java?
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 循环,这样它将 运行 游戏,并且在游戏 运行 之后,它会询问用户是否 he/she 想再次玩。然后用户可以输入任何内容,如果字符串 he/she 类型以 "y" 或 "Y" 开头,那么游戏将再次进行。 (除此之外,假设用户没有键入 "n" 或 "N" 以外的任何其他字母,那么程序将转到方法调用 stats(); )
问题是,在游戏运行一次并且用户猜对之后,程序甚至没有要求再玩一次,直接进入stats();方法调用。我究竟做错了什么?我该如何修复它,以便它会要求用户再次播放,并且只要用户键入任何以 "y" 或 "Y"?
开头的单词,它就会继续播放您正在将 again
初始化为空字符串。因此,当它到达您的 while
时,它不会以任何一个开头。您需要使用 do
/while
循环。
do {
// Same content as your other loop
} while (again.startsWith("y") || again.startsWith("Y"))
这将允许您在尝试循环之前设置 again
变量。
again
在第一次检查时是一个空字符串,所以根本不执行 while。
您正在寻找 do .. while
结构。
由于 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?");
}
也添加了对大小写检查的简化。
看起来 console.next()
生成的既不是 'y' 也不是 'Y'。您是否尝试过在循环结束之前打印 again
是什么?尝试转储内容(不仅是字符,还有读取值的长度。
见How do you accept 1 or 2 string variable with console.next() in shortest code, Java?