【问题标题】:Generate incremented random numbers between 0 to 100 every second where new number should be greater than the previous nymber每秒生成 0 到 100 之间的递增随机数,其中新数字应大于前一个数字
【发布时间】:2014-12-05 12:56:33
【问题描述】:

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

【问题讨论】:

  • 如果第一个随机数是100呢? :)
  • :) 这是一个很好的问题,但它只是我模块的一部分,所以即使我一开始得到 100,我的工作也会完成。但是,是的,我没有提到出口部分。无论如何谢谢:)
  • @JoachimIsaksson :如果我希望循环在退出前返回至少 30 个随机数怎么办?那怎么办?
  • @RahulUkil 不要增加到当前值和最大值之间的数字,只需增加 1 和 d (max-min) / steps 之间的随机数。
  • @Sirko 你能给我密码吗?

标签: javascript random counter increment


【解决方案1】:

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

对于 cmets 的 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();

【讨论】:

  • 只是一个查询是否有可能在退出之前总是返回至少 30 个随机数,是的,你是对的,我只是卡在随机生成的数字上,所以我问了这个问题,当然它会拥有并退出部分感谢您在代码中添加它。希望您的代码可以在我的模块中使用。 :)
  • 非常感谢 :D 你值得喝啤酒 :D 你节省了我的时间。只是想在 if 条件中提到“i”应该用“max”替换变量的名称:D 非常感谢。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    试试这个:

    // 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;
    });
    &lt;span id="rand"&gt;&lt;/span&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 2011-01-23
      • 2014-12-27
      • 2014-01-16
      相关资源
      最近更新 更多