【问题标题】:javascript random numbers make the chance bigger to get some valuesjavascript随机数使获得某些值的机会更大
【发布时间】:2012-05-22 18:56:44
【问题描述】:

我制作了某种编码函数,它使用 62 个字符的数组(a-z、A-Z、0-9) 然后我使用一个随机数来访问其中一个。
但是如果我使用它,它会返回很多字母,并且我想要与数字一样多的字母(这也是合乎逻辑的,因为数字的机会是 10/62 与 50/62)
有人能告诉我一些生成随机数的函数,但它更有可能获得 52-62 之间的值,然后是低于 52 的值。

【问题讨论】:

  • 多少“更高的机会”
  • 他们必须有同样的机会 50/50
  • 您正在寻找的是一个加权随机数生成器。 javascriptkit.com/javatutors/weighrandom2.shtml 有一种方法可以做到这一点。
  • 这就是我需要的东西,非常感谢你

标签: javascript random


【解决方案1】:

这使您有 50/50 的机会获得数字:

var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var digits = "0123456789";

function getRandomChar() {
  var r = Math.random();
  return r < 0.5 ? letters.charAt(Math.floor(r*letters.length*2)) : digits.charAt(Math.floor((r-0.5)*digits.length*2));
}

【讨论】:

    【解决方案2】:

    如果您想获得例如 0..100 之间的随机值,但在 50..60 中发生的几率更高,您应该在方程中添加第二个随机函数:

    var rnd = Math.round(Math.random()*( 100 - 50 ) + Math.round(Math.random()*10));
    

    在这种情况下,第一个随机数生成在 0 到 50 之间,然后有机会更高,直到 60

    在您的 52-62 情况下,它应该是这样的:

    var rnd = Math.round(Math.random()*( 52 ) + Math.round(Math.random()*10));
    

    【讨论】:

    • 这不会降低字母表中前 10 个字母的可能性吗?
    • 是的,你增加了概率,但是你在你的问题中声明:“......但是有更高的机会获得 52-62 之间的值”
    • 不要使用Math.round(Math.random()*n)。它产生从 0 到 n 的随机数,但你得到 0 或 n 的频率是其他数字的一半。使用Math.floor(Math.random()*n)
    • 此外,此方法将不太可能获得介于 52 和 62 之间的值(并且不太可能获得介于 0 和 9 之间的值)。
    • 我理解为 0..9,但它如何降低获得 52-62 之间的值的可能性?
    【解决方案3】:

    首先在 0 和 1(正面或反面)之间进行选择,如果是 1,请使用仅返回数字的单独函数。否则返回一个带有单独函数的字母,该函数只返回字母。

    【讨论】:

      【解决方案4】:
      function getRandomIndex(){
          // flip a coin... 50% chance the if occurs, 50% chance the else occurs
          if(Math.floor(Math.random() * 2) == 0){
              // return the number random function, values 52 and up
              return Math.floor(Math.random() * 10) + 52;
          }
          else{
              // return the character random function, values 0 to 51
              return Math.floor(Math.random() * 52);
          }
      }
      

      【讨论】:

      • Math.floor(Math.random()) 始终为 0。
      • @Guffa - 啊,你是对的,我已经更新了我的答案来解决这个问题。很好的收获。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 2021-03-22
      • 2014-12-11
      相关资源
      最近更新 更多