【问题标题】:How do you make a variable have a 50 percent chance of being one value and 50 percent chance of being another?你如何让一个变量有 50% 的机会成为一个值和 50% 的机会成为另一个?
【发布时间】:2016-02-28 12:59:44
【问题描述】:
 a = document.getElementById("find").value
    if (a == 'Spark' || a == 'Fire') {
        var monster = x
        var player = y
        var damage = Math.floor(Math.random() * 25)
        var damageplayer = Math.floor(Math.random() * 30)
        alert('Your squad succeeded the enemy has ' + (x = x - damage) + ' original territories!');
    alert ('You have' + (y = y - damageplayer) + 'original territories!'); }

这是我上面的代码,我试图让它有 50/50 的机会损坏是否会 = Math.Floor(math.random () *25) 或 = 0。我尝试将数学 .random 乘以 1,然后再乘以数学。随机到 25 并且没有工作。你如何让它有 50% 的时间等于 0,而另外 50% 的时间等于 math.random * 25?

【问题讨论】:

  • 你可以使用这个:Math.round(Math.random()*2),它会返回一个 0 或 1,这不是 50% 的机会,但它非常接近。

标签: javascript html variables


【解决方案1】:

这是一种方法:

var coin = function() {
    return (Math.random() < 0.5 ? 0 : 1);
}

var damage = 25*coin();

【讨论】:

    【解决方案2】:

    不要使用floor(),因为它总是向下取整。使用round()

    var zeroOrOne = Math.round(Math.random());
    var damage = zeroOrOne * Math.floor(Math.random() * 25);
    

    或者,如果您是那些“将尽可能多的代码塞进一行”的人之一:

    var damage = Math.round(Math.random()) * Math.floor(Math.random() * 25);
    

    【讨论】:

    • 也许他们想四舍五入。
    • 这不起作用。 Math.random 缺少括号
    • @AshBurlaczenko 我认为他们希望在Math.floor(Math.random * 25) 部分上使用floor(),但您永远不能使用floor() 来确定50/50 部分。好吧,我想如果你这样做 Math.floor(Math.random() * 2) 可以,但我认为这很奇怪。
    【解决方案3】:

    有时我想知道 Math.random 到底有多随机......

    另一种选择:

    return (new Date().getMilliseconds() % 2);

    【讨论】:

    • 使用 Die Hard 测试很容易测试。与 Donald Knuth 开发的任何发电机一样好。有证据证明你的方式是随机的吗?重复周期是多少?
    • 不,从计算的角度来看,这没有什么特别“随机”的。但是,当它基于用户生成的事件时,它确实充分满足了“50/50 机会”的要求。
    • 我认为它需要是随机的。
    【解决方案4】:
    damage = (Math.random() < 0.5) ? 0 : (Math.random() * 25);
    

    【讨论】:

      【解决方案5】:

      试试

      var aux = Math.random()
      
      if (aux < 0,5){
      
          aux = 0
      
      }else{
      
         aux = damage
      }
      

      然后你可以使用 var aux 来代替伤害

      【讨论】:

        【解决方案6】:

        我找到了办法:

        Math.random();
        if(Math.random() >= 0.5){ \\set variable to value A }
        else { \\set variable to value B }
        

        由于Math.random 会随机选择一个数字01,所以我在0.5 设置了检查。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-16
          • 2020-07-01
          • 2017-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多