生成100的随机倍数

时间:2018-06-04 12:59:12

标签: javascript random

我正在尝试使用javascript生成100的随机倍数。

我希望以下内容生成1000到4000之间的随机数。然后检查它是否是100的倍数,如果是,则返回它。如果不是,请尝试生成另一个号码。

我预计在if循环的else部分,rand()会再次调用该函数。

 function rand() {
    num = Math.floor(Math.random() * 4000) + 1000;
    if (num % 100 == 0) {
      return num;
    } else {
      rand();
    }
  }

Plunker:https://plnkr.co/edit/7tSGNiGQBUAYJsdMVeEr?p=preview

对于距离我未定义而不是100的倍数

4 个答案:

答案 0 :(得分:11)

  

我希望以下内容生成1000到4000之间的随机数。然后检查它是否是100的倍数,如果是,则返回它。如果不是,请尝试生成另一个号码。

要做到这一点,您必须返回递归调用rand的结果:

} else {
  return rand();
}

但是没有必要这样做。在1000 <= n <1的范围内获得100的随机倍数。 4000:

return (Math.floor(Math.random() * 30 + 10)) * 100;

,例如,创建10 <= n <10的范围内的随机数。然后将它乘以100.: - )

直播示例:

function rand() {
    return (Math.floor(Math.random() * 30 + 10)) * 100;
}

for (var n = 0; n < 100; ++n) {
  console.log(rand());
}
.as-console-wrapper {
  max-height: 100% !important;
}

答案 1 :(得分:1)

你只是缺少一个return语句,没有它,该函数只是运行,当找到匹配时它没有返回

&#13;
&#13;
function rand() {
  num = Math.floor(Math.random() * 4000) + 1000;
  if (num % 100 == 0) {
    return num;
  } else {
    return rand(); //<-- here
  }
}

console.log(rand())
&#13;
&#13;
&#13;

答案 2 :(得分:1)

这里很少有东西1,将你的兰特函数改为具有不同的范围

num = Math.floor(Math.random() * (3000) + 1000);

其次,你通过在self里面调用它来创建一个递归函数,为此你需要将值返回到过去的调用函数,如果不是,则值保留在最后一次成功调用上。

else {
      num = rand();
      return num;
    }

希望这会有所帮助:&gt;

function rand() {
    let num = Math.floor(Math.random() * (3000) + 1000);
    if (num % 100) {
      num = rand();
    }
    return num;
  }
  
console.log(rand());

答案 3 :(得分:1)

Your method (generate any random number between 1000 and 4000 and only return multiples of 100) is 100 times slower than necessary and doing it recursively will probably crash the stack. Do a little elementary arithmetic:

function rand() { return 100 * Math.floor(30 * Math.random() + 10); }

You don't specify whether the 4000 is inclusive or not. If so, make that 30 above a 31.