为什么变量总是输出1,即使它在Javascript中递增了

时间:2018-07-01 13:39:58

标签: javascript variables scope

我尝试解决在线发现的问题。我已经成功解决了这个问题,但是有一个我无法解决的小错误。

问题

  

编写一个猜测游戏,用户必须猜测一个秘密号码。   每次猜测之后,程序都会告诉用户其号码是否为   太大或太小。最后,需要尝试的次数   被打印。

这是我的代码:

// Generate a random number between 1 and 100
var num = Math.floor(Math.random() * (100)) + 1;
var running = true;    

while(running) {
    var tries = 1;
    var input = prompt("Take a guess");

    if (input == num) {
        console.log("Correct!");

        console.log("Number of tries: " + tries);
        running = false;
    }else if (input > num) {
        console.log("Too big");
    }else if (input < num) {
        console.log("Too small");
    }
    tries++;
}
  

错误

     
    

即使用户尝试了1次以上,程序仍会说,

         
      

尝试次数:1

    
  

请解释我在做什么错。

谢谢。

3 个答案:

答案 0 :(得分:3)

您在while循环的每次迭代中重新初始化<span class="headerText"> <a class="headerText" href="http://example.com"> my link </a> </span>

tires

尝试在循环外进行初始化。

while(running) {
    var tries = 1;
    ...
}

答案 1 :(得分:0)

您的变量tries会在while主体内进行缩放。因此,在任何循环迭代中,此变量都将获得值1。要解决此问题,应在循环外部声明并初始化变量:

// Generate a random number between 1 and 100
var num = Math.floor(Math.random() * 100) + 1;
var running = true;
var tries = 1;

while (running) {
  var input = prompt("Take a guess");

  if (input == num) {
    console.log("Correct!");
    console.log("Number of tries: " + tries);
    running = false;
  } else if (input > num) {
    console.log("Too big");
  } else if (input < num) {
    console.log("Too small");
  }

  tries++;
}

注意:请勿使用console.log(),而应使用alert()。控制台用于调试,而不用于通知用户消息。

答案 2 :(得分:0)

我可以看到你的问题。如果将变量放在while函数中,则每次都会将其重置,这意味着每次将为1。

如果将其放在外面,则可以正常运行。另外,我相信promt返回的是字符串而不是数字,这就是为什么我建议您将数字转换为字符串或将promt转换为数字的原因。

这是工作代码:

var num = Math.floor(Math.random() * (100)) + 1;
var running = true;    
var tries = 1;

while(running) {

    var input = parseFloat(prompt("Take a guess"));

    if (input == num) {
        console.log("Correct!");

        console.log("Number of tries: " + tries);
        running = false;
    }else if (input > num) {
        console.log("Too big");
    }else if (input < num) {
        console.log("Too small");
    }
    tries++;
}