当前位置: 首页 > 知识库问答 >
问题:

JavaScript:为什么随机数生成不在每个循环迭代中使用新的种子值?

柯梓
2023-03-14

我感到困惑的是,为什么在通过for循环的每次迭代中,下面的代码会为race和gender生成相同的值对。我想像random()的初始种子值(在我的代码中没有显式声明)是在第一次迭代中获得的,然后循环根据初始种子继续到随机序列中的下一个值,但情况似乎并非如此。相反,它似乎对每个迭代使用相同的种子/值,从而导致在每个迭代中相同的种族和性别值。

最小工作示例:

    // Two arrays
    var race = ["B","W"];
    var gender = ["F", "M"];	
    
    for (i = 0; i < 6; i++) {
            var race = race[Math.floor(Math.random()*race.length)];
            var gender =  gender[Math.floor(Math.random()*gender.length)];
            document.write(race)
            document.write(gender)
            } 

    // Example result: BMBMBMBMBMBM (BM repeated 6 times)

有没有办法使用独立绘制的值来循环,而不是为每个循环迭代生成相同的值?显然,这个问题在C++中已经得到了回答,关于Javascript种子处理还有很多问题,但不是这个问题。

共有1个答案

马峻
2023-03-14

在代码片段中,您对数组和随机生成的变量都使用了“race”和“gender”。你需要使用4个不同的名字。

    // Two arrays
    var races = ["B","W"];
    var genders = ["F", "M"];	
    
    for (i = 0; i < 6; i++) {
            var race = races[Math.floor(Math.random()*races.length)];
            var gender =  genders[Math.floor(Math.random()*genders.length)];
            document.write(race)
            document.write(gender)
            } 

    // Example result: BMBMBMBMBMBM (BM repeated 6 times)
 类似资料:
  • 我正在尝试使用For循环将一个随机整数(0-2)添加到一个变量中指定的次数。我遇到的问题是,循环不是每次循环时都使用一个新的随机数,所以,如果我输入9,我只能得到0、9,或者18。 我希望一个对象返回的键“a”和“b”具有不同的数值。

  • 考虑这个简单的C++函数来计算数组的前缀和: 它是4个融合的UOP1,这个CPU可以支持4个融合的OPs/周期。 有通过和携带的依赖链,每个都是一个循环,但是这些UOP可以到4个ALU端口中的任何一个,所以似乎不太可能冲突。融合的需要转到p6,这是一个更令人担忧的问题,但我只测量到p6的1.1 UOPS/迭代。这将解释每次迭代1.1个循环,但不是1.4个循环。如果我将循环展开2倍,端口压力会低得多

  • 问题内容: 我脑子里有一个大问题: 我可以使用种子数生成随机数: 但是我不明白的是那颗种子的作用。例如,有什么区别 该代码具有以下内容: 问题答案: 当您向one-arg 构造函数 提供特定的硬编码种子时,每次您运行该程序时,将生成的随机数将始终相同。当您需要可预测的随机数源时就需要这样做。 但是,当您不提供种子时,构造函数将根据为您选择一个种子。每次运行程序时,随机数都会不同,因为种子每次都会不

  • 本文向大家介绍为什么在JavaScript数组迭代中使用“ for…in”循环是个坏主意?,包括了为什么在JavaScript数组迭代中使用“ for…in”循环是个坏主意?的使用技巧和注意事项,需要的朋友参考一下 在大多数情况下,通常最好使用' for '循环而不是“ for ... in ”循环,因为“ for ... in ”循环会产生索引 ,而不会打扰剩余的索引普通的“ for ”循环显示

  • 这个脚本应该以随机生成的延迟滚动浏览网站上的每个容器。对于循环中的每次迭代,我要将ms的“暂停”替换为一个在和秒之间随机生成的数字。 随机数生成器: 就像这样工作很好。在每次迭代之后,会有2秒的暂停。但是,当我移除注释以添加行以随机化每次迭代之间的时间时,值(它应该滚动到哪个容器)一开始很好,但后来也变成随机的。 控制台输出: 我该怎么解决这个?

  • 问题内容: 这是我的内容: 在Jenkins中使用Pipeline插件执行作业时,仅打印列表中的第一项。 有人可以向我解释这种奇怪的行为吗?是虫子吗?还是只是我不了解Groovy语法? 编辑 :预期的作品: 问题答案: 此处接受的答案指出这是一个已知的错误,并且使用了对我不起作用的解决方法,因此,我将提供我最近发现的更新。 尽管有了JENKINS-26481的解决方案(在撰写本文时,它还算是最近的