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

时间:2014-10-10 11:07:34

标签: javascript random counter increment

我需要一个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.....

3 个答案:

答案 0 :(得分:3)

您不应该在零和最大值(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();

AS的评论和最低步骤的要求,直到达到最大值:

在每次迭代中,只需将您的数字增加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();

答案 1 :(得分:0)

如果你将“两个数字之间”的逻辑提取到它自己的函数中,这就变得容易多了。这样,您只需在上次生成的数字和最大数字之间生成一个数字。

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);
}

答案 2 :(得分:0)

试试这个:

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