【问题标题】:A random number generator statement in a loop is giving me the same number every time. Javascript循环中的随机数生成器语句每次都给我相同的数字。 Javascript
【发布时间】:2014-05-05 14:25:18
【问题描述】:

所以我正在编写这个循环,其中有一个随机数生成器。为什么它只为循环的所有迭代选择一个随机数而不是一个新的随机数?这是我的代码:

for ( i = 0; i < 25; i++ ) {
 var randNum = 0;
 var randNum = Math.floor(Math.random() * 5);
}

这是在 chrome 浏览器中。这段代码有问题吗?

【问题讨论】:

  • 我添加了一个 print 语句作为循环的最后一个元素,我得到了伪随机值,正如 Firefox 和 Chromium 中所预期的那样。请注意,您不必要地初始化变量两次,但这不会导致此问题。
  • 您如何观察 randNum 在各种中间迭代中的值?为什么奇怪的双 var —— 循环体中两者的第一条语句在做什么?
  • 请向我们展示您的实际代码。

标签: javascript loops


【解决方案1】:

这段代码有问题吗?

“它绝对什么都不做”将是它的第一件事。

如果这是您的代码的“简化”版本,那么您已经“简化”了重要的上下文(例如您如何尝试和使用 randNum)。

【讨论】:

    【解决方案2】:

    如果我运行该代码,我会得到随机数:

    1 2 2 0 2 1 2 2 1 0 1 0 3 4 2 1 0 3 3 1 1 4 1 2 4
    

    你是如何读取变量的?我使用了这段代码:

    <script type="text/javascript">
    for ( i = 0; i < 25; i++ ) {
     var randNum = 0;
     var randNum = Math.floor(Math.random() * 5);
     document.write(randNum + "\n");
    }
    </script>
    

    我们需要更多的上下文。

    【讨论】:

      【解决方案3】:

      您可能在循环内的匿名函数中使用了randNum 变量。

      由于循环总是分配给同一个变量,循环结束后对任何匿名函数的任何调用都只会看到最后一个数字。

      要解决此问题,请将循环体移动到单独的函数中(命名或匿名)。

      【讨论】:

        【解决方案4】:

        用 jQuery 输出试了一下,效果很好:

        <html>
            <head>
                <script src="http://code.jquery.com/jquery-latest.js"></script>
            </head>
            <body>
              <p></p>
                <script>
                for ( i = 0; i < 25; i++ ) {
                     var randNum = 0;
                     var randNum = Math.floor(Math.random() * 5);
                      $("p").append(" "+randNum);
                }
        
                </script>
            </body>
        </html>
        

        我第一次得到像这样的输出 4 2 4 1 1 3 3 2 0 1 4 0 3 4 3 1 4 1 1 2 1 1 2 4 2

        秒: 1 4 1 3 1 3 0 0 2 1 2 1 4 3 2 0 3 3 0 4 4 3 3 4 4

        对我来说看起来不错,也许问题出在不同的地方。

        【讨论】:

          【解决方案5】:

          删除 randNum 中的重复变量,但在我的 chrome 上它适用于两种情况。使用mac版本。这可能与您使用 randNum 的方式有关,您是否以某种方式在外部使用它?你的代码什么都不做(比如写数字)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-03-01
            • 2018-09-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-04
            相关资源
            最近更新 更多