2010-08-05 4 views
0

Pour obtenir un nombre entier aléatoire entre 0 et 4 inclus, j'utilise le code suivant:comment randomiser une variable entière, avec des cotes sur certains numéros apparaissant

var random = Math.floor(Math.random() * 5); 

Cependant, je veux le numéro 4 à choisir deux fois plus souvent que les autres numéros. Comment ferais-je pour obtenir un nombre aléatoire entre 0-4 inclus, mais avec le nombre 4 apparaissant deux fois plus de fois que 0-3?

+2

Voulez-vous que 4 apparaisse deux fois plus souvent, ou deux fois plus de fois que 0-3 combinés? – Paddy

Répondre

8

Je pense que la façon easist est d'ajouter le numéro deux fois au tableau:

var nums = [0, 1, 2, 3, 4, 4]; 
var index = Math.floor(Math.random() * 6); 
var random = nums[index]; 

Mais quelque chose de plus générique, vous pouvez avoir un tableau:

var nums = [0, 1, 2, 3, 4]; 
var odds = [0.16667, 0.16667, 0.16667, 0.16667, 0.33333]; 
var r = Math.random(); 
var i = 0; 
while(r > 0) 
    r -= odds[i++]; 
var random = nums[i]; 
+2

Vous n'utilisez pas réellement le tableau nums? – Paddy

+0

Il devrait être évident que la variable aléatoire renvoie l'indice du tableau nums? –

+0

Merci, Tom :). – sje397

4

Faites-le comme ceci:

var random = Math.floor(Math.random() * 6); 
if (random == 5) random = 4; 
2
Math.floor(Math.random() * 2) == 0 ? Math.floor(Math.random() * 5) : 4 

Ici, 4 a 50% de chances de coz premier sélecteur aléatoire, en ajoutant jusqu'à 20% pour le second sélecteur aléatoire.

+1

Ce n'est pas deux fois plus souvent que les autres numéros ..? – sje397

2

J'aime réponse initiale sje397 avec la correction que Paddy suggère:

var nums = [0, 1, 2, 3, 4, 4]; 
var random = nums[Math.floor(Math.random() * 6)]; 
Questions connexes