每秒生成0到100之间的递增随机数,其中新数应大于前一个nymber

Generate incremented random numbers between 0 to 100 every second where new number should be greater than the previous nymber

本文关键字:大于 新数应 nymber 一个 随机数 之间      更新时间:2023-09-26

我需要一个javascript,每次调用我都会得到一个0-100之间的随机数字,其中当前数字应该大于以前的数字。我写了一个每秒获取随机数的代码,但一直坚持用增量生成。

<script>
var span = document.getElementsByTagName("span")[3];
 var i = 100;
(function randNumber() {
        var a = Math.floor((Math.random() * i) + 1);
        span.innerHTML = "RandNumber: " + a;
        setTimeout( randNumber, 1000);
})();

注意:数字应该是随机生成的
示例结果可能是:2,5,7,8,22,23,34,56,78,88.....

您不应该创建一个介于零和最大值(i)之间的新随机数,而应该只创建一个位于上次创建的数(lastNumber)和最大值之间(i)。此外,当随机数达到最大值时,您可能需要停止。

var span = document.getElementsByTagName("span")[3],
    i = 100,
    lastNumber = 0;
function randNumber() {
   lastNumber = lastNumber + Math.floor( Math.random() * (i - lastNumber) + 1 );
   span.innerHTML = lastNumber;
   if( lastNumber < i ) {
     setTimeout( randNumber, 1000 );
   }
}
randNumber();

至于评论和达到最大值之前的最小步数要求:

在每次迭代中,只需将数字增加一个介于1和((max - min) / steps)之间的随机值。它与上面的代码几乎相同。

var span = document.getElementsByTagName("span")[3],
    max = 100,
    min = 0,
    lastNumber = 0,
    minSteps = 30;
// how wide can the average step be at most?
var stepWidth = (max - min) / minSteps;
function randNumber() {
   lastNumber = lastNumber + Math.floor( Math.random() * stepWidth + 1 );
   span.innerHTML = lastNumber;
   if( lastNumber < max ) {
     setTimeout( randNumber, 1000 );
   }
}
randNumber();

如果像这样将"两个数字之间"逻辑提取到它自己的函数中,这会变得容易得多。这样,您只需生成一个介于上次生成的数字和最大值之间的数字。

var max = 100
var last_number = 1

var interval_id = setInterval(function(){
    last_number = get_random_number_greater_between(last_number, max)
    span.innerHTML = "RandNumber: " + last_number;
    if(last_number >= max){
        window.clearInterval(interval_id)
    } 
}, 1000)
function get_random_number_greater_between(low, high){
    return Math.floor(Math.random() * (high - low + 1) + low);
}

试试这个:

// generate a random number from 0 to max - 1.
function rand(max) {
    return Math.floor(max * Math.random());
}
// generate a random number from min to max.
function range(min, max) {
    return min + rand(1 + max - min);
}
// the loop function
function next(n, callback) {
    var m = range(n, 100);
    if (m < 100) setTimeout(next, 1000, m + 1, callback);
    callback(m);
}
var span = document.getElementById("rand");
next(0, function (m) {
    span.innerHTML = "Random number: " + m;
});
<span id="rand"></span>