虽然循环不会重复

时间:2015-02-10 00:38:12

标签: java string loops while-loop

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"?

4 个答案:

答案 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?