【问题标题】:How can i make my random number generator stop producing the same numbers?(Javascript)我怎样才能让我的随机数生成器停止产生相同的数字?(Javascript)
【发布时间】:2020-04-16 08:14:42
【问题描述】:

我创建了一个随机数生成器,我想避免重复相同的值。 这是我的代码:

function function1() {
  var randomNumber = Math.floor(Math.random() * 30) + 1;
  var imgName = "pic (" + randomNumber + ").jpg";
  document.getElementById("imgid2").src="Pictures" + "/" + imgName;
}

【问题讨论】:

标签: javascript random numbers generator


【解决方案1】:

为防止重复,请生成一个包含所有可能值的随机数组。 randojs.com 很容易做到这一点。对于所有数字 0-30 的混洗数组,您只需要说:

var sequence = randoSequence(30);

console.log(sequence);
<script src="https://randojs.com/1.0.0.js"></script>

因此,要转换您的代码,您所要做的就是:

var sequence = randoSequence(30);
function function1() {
    if(sequence.length == 0){//refill the array once we've completely iterated through all possible values
        sequence = randoSequence(30);
    }

    var randomNumber = sequence.pop();
    var imgName = "pic (" + randomNumber + ").jpg";
    document.getElementById("imgid2").src="Pictures" + "/" + imgName;
}

请注意,一旦我们用完,此代码还会再次遍历所有可能值的完整集合。就像我说的,这段代码使用randojs.com,所以如果你想使用它,一定要把它扔到你的html文档的head标签中:

<script src="https://randojs.com/1.0.0.js"></script>

如果您只想点击“运行”并查看它的工作情况,这里有一个概念证明:

var sequence = randoSequence(30);

function function1() {
  if (sequence.length == 0) { //refill the array once we've completely iterated through all possible values
    sequence = randoSequence(30);
    console.log("ALL POSSIBLE VALUES REFILLED.");
  }

  console.log(sequence.pop());
}

for (var i = 0; i < 35; i++) function1();
&lt;script src="https://randojs.com/1.0.0.js"&gt;&lt;/script&gt;

【讨论】:

  • 这非常有帮助,非常感谢。有没有办法让它在循环所有可用号码后停止?
  • 没问题!只需将 if 语句中的内容替换为:return false;
【解决方案2】:

如果您不想重复,一种方法是生成所有可能值的数组,然后每次从数组中获取随机值(并同时删除它)。这样价值观就不会重复。

【讨论】:

    猜你喜欢
    • 2012-12-24
    • 2019-11-19
    • 2018-08-29
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    相关资源
    最近更新 更多