【问题标题】:Should I use an array instead of a random number generator here?我应该在这里使用数组而不是随机数生成器吗?
【发布时间】:2020-06-30 22:11:18
【问题描述】:

我正在使用 Javascript、HTML 和 CSS 制作记忆游戏。

以下是游戏的简要说明:

  • 程序生成一个随机数,显示在 屏幕。
  • 大约 5 秒后,数字消失,屏幕上出现一个弹出框,要求用户输入他或她刚刚看到的数字。
  • 如果该数字与之前屏幕上的数字匹配,则会出现一个带有“正确”字样的警告框。如果没有,则会出现一个带有“Nope. Nice try”文本的警告框。

这是我的问题: 即使我输入了正确的数字,警告框也会显示“不。不错的尝试”。

这是我迄今为止编写的代码: (请记住,我还没有实现任何 setInterval/setTimeout 函数。为方便起见,我制作了“隐藏”函数手册。)

JS:

/* game level = easy 

numbers from 1-9000 are generated */

function random(a){
    a = Math.floor(Math.random() * (9000 - 1) + 1);
    
    document.getElementById("screen").innerText = a;
}

function getInput(a){
    var input = window.prompt("Enter the number you just saw:");
    
    if(input === a){
        alert("Correct!");
    }
    else{
        alert("Nope. Nice try.");
    }
}

/* hide toggle */

function hide() {
  var x = document.getElementById("screen");
  if (x.style.display === "none") {
    x.style.display = "none";
  } else {
    x.style.display = "none";
  }
} 

我的问题:使用 1-9000 的数字数组是否理想?

有了一个数组,我想我可以做这样的事情:

for(var i = 0; i < arr.length; i++){
   if(//){
  }
  else{
  }
}

感谢您的阅读。

【问题讨论】:

  • 可以使用一个数组,但是这里真的没有效率。 === 检查完全相等(即检查值和类型)。但在这里,您将数字 (a) 与字符串 (input) 进行比较。将您的输入转换为数字:if (parseInt(input, 10) === a)(这里的 10 是为了确保您的数字以 10 为基数处理)
  • @blex 你为什么不提供这个作为答案? :)
  • @F.Müller 因为我确定这是一个重复的问题,但我懒得去搜索它;)

标签: javascript java html arrays


【解决方案1】:

据我所知,您将a 视为一个范围大于实际范围的变量。 a 是一个参数,它的作用域没有超出它声明的函数。

在这种情况下,random(a) 中的agetInput(a) 中的a 是两个不相关的实体,其范围不重叠。

一种解决方案可能是将a 设为全局变量并在任何函数之外声明它,例如

var a;

function random(){
    a = Math.floor(Math.random() * (9000 - 1) + 1);
    document.getElementById("screen").innerText = a;
}

function getInput(){
    var input = window.prompt("Enter the number you just saw:");
    
    if(input == a){ // make '===' into '==' instead btw
        alert("Correct!");
    }
    else{
        alert("Nope. Nice try.");
    }
}

【讨论】:

    【解决方案2】:

    我看到您从用户那里收到了一个字符串,但您尝试将它与一个整数进行比较。所以假设 a = 1 和 input ='1' ,这意味着它们永远不会相等。

    您应该将字符串转换为 int,然后进行比较。

    【讨论】:

      【解决方案3】:

      试试

      input == a
      

      代替

      input === a
      

      Math.random 返回一个数字,您将它与类型匹配的字符串进行比较。

      console.log(1 === '1');
      console.log(1 == '1');

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-03
        相关资源
        最近更新 更多