Setinterval断断续续生成随机数序列

时间:2013-12-20 21:51:08

标签: javascript performance setinterval

我正在尝试构建一个脚本集,随机生成一到六个之间的数字,只显示浏览器中的数字。在开始时,可​​以设置间隔的值。我有一个完全符合我要求的代码。唯一的问题是间隔不平滑。它以某种方式口吃。 有人知道如何改进随机数字流利显示的代码吗?

<html>
<body>

<p style="font-size: 500; color: red; text-align: center" id="random_number"></p>

<script>

var interval = parseInt(prompt("Intervall [ms]:", ""));

fRandomNumbers(1,6);

window.setInterval(function(){fRandomNumbers(1,6)}, interval);

function fRandomNumbers(min,max)
{
    var random_number = Math.floor( Math.random() * ( max - min + 1 ) ) + min;             
    document.getElementById("random_number").innerHTML = random_number;
}

</script>

</body>
</html>

1 个答案:

答案 0 :(得分:1)

就像@CoreyOgburn和@Iwburk指出的那样,问题是有时你会得到相同的数字:

  

你有六分之一的机会选择相同的号码两次   一行,当发生这种情况时,看起来数字没有改变。

然后,要解决它,只需确保新的随机数与前一个不同:

var interval = parseInt(prompt("Intervall [ms]:", "")),
    random_number;

fRandomNumbers(1,6);

window.setInterval(function(){fRandomNumbers(1,6)}, interval);

function rand(min,max,diff) {
    var n;
    while(diff === (n = Math.floor( Math.random() * ( max - min + 1 ) ) + min)){}
    return n;
}

function fRandomNumbers(min,max)
{
    random_number = rand(min,max,random_number);             
    document.getElementById("random_number").innerHTML = random_number;
}

警告1 :上面的rand函数会产生无限循环,例如:如果被称为rand(1,1,1)

警告2 :请注意,生成的数字序列不会是随机的,因为(足够大的)真随机序列将包含一些相等的相邻数字。然后,正如@CoreyOgburn指出的那样,它不能很好地模仿骰子。