62

次のようなプログラムを作成したいと思います。

  • 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");
}
4

7 に答える 7

73

はい、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

そうすれば、あらゆる可能性を見逃すことはありません。

于 2012-07-19T00:10:10.827 に答える
21

このような場合、通常は乱数を1 つ生成し、その 1 つの数に基づいてケースを選択するのが最善です。次のようにします。

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");
于 2012-07-19T00:09:36.237 に答える
1

私はこれを私の不和ボットでいつもやっています

const a = Math.floor(Math.random() * 11);
    if (a >= 8) { // 20% chance
        /*
          CODE HERE
        */
    } else { // 80% chance
        /*
          CODE HERE
        */
    }

必要に応じて、11 を 101 に変更できます。

余分な 1 がある理由は、1 - 9 の代わりに 1 - 10 (または 1 - 99 の代わりに 1 - 100) を行うためです。

于 2021-05-28T10:23:40.290 に答える
0

20%の確率で「ゆっぴー!」console.log で

const testMyChance = () => {

  const chance = [1, 0, 0, 0, 0].sort(() => Math.random() - 0.5)[0]

  if(chance) console.log("Yupiii!")
  else console.log("Oh my Duck!")
}

testMyChance()
于 2020-07-22T01:25:50.990 に答える