【问题标题】:Prompting for a variable not working when trying to find random number尝试查找随机数时提示变量不起作用
【发布时间】:2015-04-20 02:45:44
【问题描述】:

我对 Javascript 简介的任务是:“编写一个接受两个数字并返回两个值之间的随机数的函数。”在我尝试提示输入变量之前,这似乎很容易,此时输出似乎不正确。

这是最推荐用于在两个整数之间查找随机数的代码,在本例中为 1 和 6:

function getRandomizer(bottom, top) {
  return function() {
    return Math.floor( Math.random() * ( 1 + top - bottom ) ) + bottom;
  }
}

var rolldie = getRandomizer(1, 6);

document.write(rolldie());

我得到的输出是它应该是的,一个介于 1 和 6 之间的随机整数。但是我的任务是提示输入数字,可以是任何数字。所以我这样做了,使用 10 和 1 作为示例数字:

var max = prompt("input 10");
var min = prompt("input 1");

function getRandomizer(bottom, top) {
  return function() {
    return Math.floor( Math.random() * ( 1 + top - bottom ) ) + bottom;
  }
}

var rolldie = getRandomizer(min, max);
document.write(rolldie());

输出:961。第二次尝试:231。等等。如果我将变量 max 和 min 直接设置为 10 和 1,则代码可以完美运行,返回 1 到 10 之间的数字。但是由于某种原因,提示输入,然后输入完全相同的数字会给出完全不同的输出。为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 1 + top 是添加数字和字符串的位置,因此 + 运算符将连接这些值,与 + bottom 相同。将值转换为数字,例如1 + Number(top)等
  • var max = Number(prompt("input 10")); var min = Number(prompt("input 1"));

标签: javascript


【解决方案1】:

发生这种情况的原因是提示被视为字符串。所以你实际上得到了 1101 和 1 之间的数字。

您可以使用parseInt 确保变量min 和max 是数字:

var max = parseInt(prompt("input 10"));

【讨论】:

  • 如果 top 是 '10' 并且 bottom 是 '1',那么 1 + top - bottom 将是 109,因为 -运算符将字符串隐式转换为数字。 ;-)
  • 你是对的,但是它又添加了底部,所以它将是 1091。
  • 我在评论我引用的表达式的结果。最后的“1”是在前一个结果乘以 Math.random() 之后添加的,后者小于 1 并被取底,因此函数返回的最大值将为“1081”(即是108 + '1')。 ;-)
  • 非常感谢!我对这样的新手错误有点尴尬,因为我过去使用过 parseInt。但我想我现在终于明白它是什么以及何时使用它了。
【解决方案2】:

试试下面的代码:

var max = Number(prompt("input 10"));
var min = Number(prompt("input 1"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2015-06-27
    相关资源
    最近更新 更多