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?