Pourcentage de chance de dire quelque chose?

Comment puis-je le faire ..

  • 80% du temps il dira sendMessage("hi");
  • 5% du temps, il dira sendMessage("bye");
  • et 15% du temps il dira sendMessage("Test");

Faut - il faire quelque chose avec les mathématiques?random()? comme

if (Math.random() * 100 < 80) {
sendMessage("hi");
}
else if (Math.random() * 100 < 5) {
sendMessage("bye");
}
31
demandé sur Isiah L 2012-07-19 04:05:43

3 réponses

Oui, Math.random() est un excellent moyen d'y parvenir. Ce que vous voulez faire est de calculer un seul nombre aléatoire, puis de prendre des décisions en fonction de cela:

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

De cette façon, vous ne manquez aucune possibilité.

41
répondu Ernest Friedman-Hill 2017-12-02 19:21:19

Pour des cas comme cela, il est généralement préférable de générer un nombre aléatoire et sélectionnez le cas en fonction de ce nombre unique, comme ceci:

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");
16
répondu sarnold 2016-10-13 20:19:10

Voici une solution approximative très simple au problème. Triez un tableau de valeurs true/false au hasard, puis choisissez le premier élément.

Cela devrait donner une chance 1 sur 3 d'être vrai..

var a = [true, false, false]
a.sort(function(){ return Math.random() >= 0.5 ? 1 : -1 })[0]
-2
répondu seanb123 2018-06-27 23:25:13