Javascript Setinterval生成随机数序列的口吃

Javascript Setinterval生成随机数序列的口吃,javascript,performance,setinterval,Javascript,Performance,Setinterval,我正在尝试构建一个脚本集,它随机生成一个介于1和6之间的数字,并在浏览器中显示该数字。在开始时,可以为间隔设置一个值。我有一个完全符合我要求的代码。唯一的问题是时间间隔不平稳。它不知怎么会口吃。 有人知道我如何改进代码,使随机数能够流畅地显示吗 <html> <body> <p style="font-size: 500; color: red; text-align: center" id="random_number"></p> <s

我正在尝试构建一个脚本集,它随机生成一个介于1和6之间的数字,并在浏览器中显示该数字。在开始时,可以为间隔设置一个值。我有一个完全符合我要求的代码。唯一的问题是时间间隔不平稳。它不知怎么会口吃。 有人知道我如何改进代码,使随机数能够流畅地显示吗

<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>

var interval=parseInt(提示(“Intervall[ms]:”,“”); fRandomNumbers(1,6); setInterval(函数(){fRandomNumbers(1,6)},interval); 函数编号(最小值、最大值) { var random_number=Math.floor(Math.random()*(max-min+1))+min; document.getElementById(“随机数”).innerHTML=随机数; }
就像@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所指出的,它不能很好地模拟骰子。

所以我完全理解你所说的“口吃”,你的意思是间隔似乎不准确?有时它比其他时间等待的时间更长?你用的是什么时间间隔?我试过JSFIDLE。我注意到有时它看起来可能会结巴,但那是因为随机生成的数字与原来一样,所以它看起来会因为缺少更改而停滞。这正是我的意思。有时需要更长的时间,直到下一个数字出现。有点不规则。我使用900毫秒作为间隔。尝试在innerHtml中追加(使用+=而不是=),并查看它每次都添加一个数字,但有时会添加相同的数字。那可能就是摊位。是的,@CoreyOgburn是对的。你有六分之一的机会连续两次选择同一个数字,而当这种情况发生时,数字似乎没有改变。这非常有效。对我来说,一个进一步的改进是允许随机数一般以一个序列生成。但是,看到这一点真的很酷。是否有可能改进代码,使生成的数字只是闪现。然后下一个随机数闪烁,等等?因为你用的是1-6,我想这是一个掷骰子。如果是这样的话,我不会排除重复的滚动(这样做会破坏随机性),相反,我会使用一些jQuery动画来帮助明确滚动已经发生。这是一个淡入淡出的新数字。@CoreyOgburn在jsfiddle中,它看起来正是我所需要的。但当我把它放在html文档中时,它就不起作用了。我的代码是:

var interval=parseInt(提示(“Intervall[ms]:”,”);fRandomNumbers(1,6);setInterval(函数(){fRandomNumbers(1,6)},interval);var计数=0;函数fRandomNumbers(min,max){var random_number=Math.floor(Math.random()*(max-min+1))+min;$('#random_number').fadeOut(100,function(){$(this).html(random_number);$(this.fadeIn(100);})}我确实使用了您以前没有使用的。您需要下载并将其添加到html中。我不想重写它们的fadeIn/fadeOut函数。更不用说他们做了很多其他事情。