我想使用此函数在min和max之间生成一个随机偶数。我需要在这个功能中改变什么?

时间:2016-05-06 17:06:35

标签: javascript

我有这个功能,它给我一个介于最小和最大之间的随机数,不包括那个数字。如何更改它以给我一个偶数的数字。



function getrandomnumber(min,max,notthis)
{
  var num=min+Math.floor((max-min+1)*Math.random());
  var j=notthis.indexOf(num)

  while (j!=-1)
  {
     num=min+Math.floor((max-min+1)*Math.random());
     j=notthis.indexOf(num)
  }
  return num;
}

a=getrandomnumber(0,100,"0,10,20")
document.write(a)




3 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题,你可以将数字除以2,如果它不是零,则是偶数。

function getrandomnumber(min,max,notthis)
{
  var num=min+Math.floor((max-min+1)*Math.random());
  var j=notthis.indexOf(num)

  if (j!=-1 && num % 2 == 0)
  {
    return num;
  }else{
    getrandomnumber(min,max,notthis);
}

a=getrandomnumber(0,100,"0,10,20")
document.write(a)

答案 1 :(得分:0)

这对你有用吗?你应该使用mod运算符来识别甚至没有。我觉得它会更干净。

function generateRandom(min, max, myArray) {
    var num = Math.floor(Math.random() * (max - min + 1)) + min;
    return (myArray.includes(num) || num%2 != 0) ? generateRandom(min, max,myArray) : num;    
}

myArray = [2, 7, 13, 14, 15];
var test = generateRandom(1, 1000, myArray);

答案 2 :(得分:0)

为了后代,灵感来自我的 answer for Java。

function randomIntFromInterval(min, max) { // min and max included 
    return Math.floor(Math.random() * (max - min + 1) + min);
}

// Get even random number within range [min, max]
// Start with an even minimum and add random even number from the remaining range
function randomEvenIntFromInterval(min, max) {
    if (min % 2 != 0) ++min;
    return min + 2 * randomIntFromInterval(0, (max-min)/2);
}

// Get odd random number within range [min, max]
// Start with an odd minimum and add random even number from the remaining range
function randomOddIntFromInterval(min, max) {
    if (min % 2 == 0) ++min;
    return min + 2 * randomIntFromInterval(0, (max-min)/2);
}

效率稍低,但可读性很强。