代码之家  ›  专栏  ›  技术社区  ›  David

如何随机化一个整数变量,在某些数字上出现赔率

  •  0
  • David  · 技术社区  · 16 年前

    为了得到一个介于0和4之间(含0和4)的随机整数,我使用以下代码:

    var random = Math.floor(Math.random() * 5);
    

    不过,我希望数字4的选择频率是其他数字的两倍。我该怎么做才能得到一个介于0-4之间的随机数,但数字4的出现次数是0-3的两倍?

    6 回复  |  直到 9 年前
        1
  •  8
  •   sje397    16 年前

    我认为最简单的方法是将数字两次添加到数组中:

    var nums = [0, 1, 2, 3, 4, 4];
    var index = Math.floor(Math.random() * 6);
    var random = nums[index];
    

    但是对于更一般的东西,您可能有一个表:

    var nums = [0, 1, 2, 3, 4];
    var odds = [0.16667, 0.16667, 0.16667, 0.16667, 0.33333];
    var r = Math.random();
    var i = 0;
    while(r > 0)
      r -= odds[i++];
    var random = nums[i];
    
        2
  •  4
  •   JochenJung    16 年前

    就这样做:

    var random = Math.floor(Math.random() * 6);
    if (random == 5) random = 4;
    
        3
  •  2
  •   Mike    16 年前
        4
  •  2
  •   simplyharsh    16 年前
    Math.floor(Math.random() * 2) == 0 ? Math.floor(Math.random() * 5) : 4
    

    在这里,4有50%的机会,因为第一个随机选择,加上20%的第二个随机选择。

        5
  •  2
  •   Manfred    16 年前

    我喜欢Sje397的初步回答,并对Paddy的建议进行了修正:

    var nums = [0, 1, 2, 3, 4, 4];
    var random = nums[Math.floor(Math.random() * 6)];
    
        6
  •  1
  •   Peter O. Manuel Pinto    9 年前

    你所要求的技术背后是使用随机洗牌袋发生器。更多细节: http://web.archive.org/web/20111203113141/http://kaioa.com:80/node/53