说话的几率是多少?

0x2*_*29A 39 javascript random percentage

我怎么做到这一点..

  • 80%的时间会说 sendMessage("hi");
  • 5%的时间会说 sendMessage("bye");
  • 它会说15%的时间 sendMessage("Test");

是否必须使用Math.random()做一些事情?喜欢

if (Math.random() * 100 < 80) {
sendMessage("hi");
}
else if (Math.random() * 100 < 5) {
sendMessage("bye");
}
Run Code Online (Sandbox Code Playgroud)

Ern*_*ill 48

是的,这Math.random()是实现这一目标的绝佳方式.你想要做的是计算一个随机数,然后根据它做出决定:

var d = Math.random();
if (d < 0.5)
    // 50% chance of being here
else if (d < 0.7)
    // 20% chance of being here
else
    // 30% chance of being here
Run Code Online (Sandbox Code Playgroud)

这样你就不会错过任何可能性.

  • @ user2537537 - 第一行声明(并定义)Java双精度浮点变量; 这只是用于声明变量的正确Java语法. (4认同)
  • 要点是你应该生成并使用一个随机数. (3认同)
  • 等等,不应该是“&lt;= 0.5”而不是“&lt; 0.5”,因为现在的情况是 49% 的机会,而不是 50%。 (2认同)
  • @DysanixOfficial 不是 49%——更像是 49.999999999……正如任何数学家都能告诉你的那样,几乎是 50%。但可以肯定 -- &lt;= 也是正确的。 (2认同)
  • @DysanixOfficial 它应该是 &lt; .5,因为 random 可以返回 0,但不能返回 1。当你写 &lt;= .5 时,你定义了这些范围: (0 ; .5) 和 (0.5+0.(1) ; 0.(9) )。所以你有 0.500...01% 为真,0.4999...9% 为假 (2认同)

sar*_*old 19

对于这样的情况,通常最好生成一个随机数并根据该单个数字选择案例,如下所示:

int foo = Math.random() * 100;
if (foo < 80) // 0-79
    sendMessage("hi");
else if (foo < 85) // 80-84
    sendMessage("bye");
else // 85-99
    sendMessage("test");
Run Code Online (Sandbox Code Playgroud)