【问题标题】:while loop doesnt stop even after condition has been fulfilled即使满足条件,while循环也不会停止
【发布时间】:2016-03-14 08:05:35
【问题描述】:

功能:

用户根据猜谜游戏输入颜色。答案错误时提示会一直提示,只有当用户设置正确答案时才会退出提示。

我做了什么: 使用了一个while循环来检查条件。在while循环中,设置了while循环只有在相当于target时才结束,target是系统随机选取的颜色

问题: 提示最初将颜色设置为答案,但即使用户设置了正确的答案,提示也会不断循环。

设置其中一种颜色时如何退出循环?

<html>

<head>
  <title>Color Guessing Game</title>
</head>

<body onload="do_game()">
  <script>
    function do_game() {
        var color = ["blue", "cyan", "gray", "green", "magenta", "orange", "red", "white", "yellow"];
        var guess_input_text, guess_input, finished = false,
          target, guesses = 0;

        var target_index = color[0, 8];
        target = target_index;
        alert(target);
        while (!finished) {
          guess_input_text = prompt("I am thinking of these colors:" +
            "\n\n blue, cyan, gray, green, magenta, orange, red, white, yellow" + "\n\n what color am I thinking of?");
          guess_input = parseInt(guess_input_text);
          guesses += 1;
          finished = target;
        }
      }
  </script>
</body>

</html>

【问题讨论】:

  • 你永远不会修改finished变量。
  • 您需要在某个时间点设置 finished = true 才能跳出循环。为什么你的行“finished = check_guess();”评论了?您需要在该函数中添加条件并返回布尔值
  • 您应该先实现 check_guess 功能,然后只有我们可以帮助您。
  • @zerkms 更新了问题
  • @SwarnenduPaul 更新了问题

标签: javascript arrays while-loop


【解决方案1】:

如果输入与目标相同,则尝试使用此代码控制循环的每一轮,如果它们相同,则完成为真:

function do_game() {
    var color = ["blue", "cyan", "gray", "green", "magenta", "orange", "red", "white", "yellow"];
    var guess_input_text, guess_input, finished = false,
      target, guesses = 0;

    var rnd = Math.floor((Math.random() * 9) + 0); //Makes a random number between 0 and 8
    target = color[rnd]; //sets the target to a random color from the color array
    while (!finished) {
      guess_input_text = prompt("I am thinking of these colors:" +
        "\n\n blue, cyan, gray, green, magenta, orange, red, white, yellow" + "\n\n what color am I thinking of?"); //gets alert-input from user
      guesses += 1;
      if(guess_input_text == target){//checks if input from user and target are the same
        finished = true;
      }
    }
  }

【讨论】:

  • 即使输入了正确答案,循环仍然会一直循环下去
  • 等我做个jsfiddle来检查。
  • 我希望它可以工作,但我无法测试它,因为我的浏览器不会提醒。
  • 这应该可以。 ealier target = color[0,8] 评估为 target="yellow"。但是在比较目标时与 int 进行比较
  • 谢谢!!!我想知道为什么我无法将以下设置为var target_index = color[0, 8]; target = target_index;??
【解决方案2】:

另一种没有完成变量的方法。使用中断

var target_text = color[0, 8];
...
while (true) {
      guess_input_text = prompt("I am thinking of these colors:" +
        "\n\n blue, cyan, gray, green, magenta, orange, red, white, yellow" + "\n\n what color am I thinking of?");

      guesses += 1;
      if(guess_input_text == target_text){
       //guessed correct answer
       break;
      }
}

【讨论】:

    【解决方案3】:

    您的代码没有按照您的想法执行。

    这不是获取随机值的索引,而是获取最后一个值。

    var target_index = color[0,8];
    

    这将得到一个随机数组值: var rand = color[Math.floor(Math.random() * color.length)];

    一旦你有了获胜的价值,就没有必要进行指数比较了。您可以简单地比较字符串,因为 prompt() 返回输入响应的字符串(为简洁起见,修改了提示文本)。

    var finished = false;
    while (!finished)
    {
        var input = prompt("What color am I thinking of?");
        finished = (input.toLowerCase() === rand);
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-15
      • 2013-04-08
      • 1970-01-01
      • 2019-01-29
      • 2013-11-22
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多