J'ai une liste de valeurs, avec des doubles entre 0 et 1 qui représentent la probabilité que je pense que c'est utile pour moi. Par exemple, pour obtenir une réponse à une question:Sélection d'une valeur proportionnellement basée sur sa double clé
0.5 call your mom
0.25 go to the library
0.6 StackOverflow
0.9 just Google it
Donc, nous pensons que googler est (environ) deux fois plus susceptibles d'être utiles que demander maman. Lorsque j'essaie de comprendre la prochaine chose à faire, je voudrais que "juste Google" soit retourné deux fois plus souvent que "appelez votre mère".
J'ai cherché des solutions avec peu de succès. La plupart des choses que j'ai trouvées s'appuient sur des clefs entières (comme How to randomly select a key based on its Integer value in a Map with respect to the other values in O(n) time?), que je n'ai pas et que je ne peux pas facilement générer.
Je pense qu'il devrait y avoir un certain type de données Java qui peut le faire pour moi. Aucune suggestion?
La réponse que vous lien vers _is_ applicable lorsque vous avez des valeurs 'double'; Ce n'est pas spécifique à l'entier. –
Je ne pense pas que ce soit le cas. Considérons la ligne 'int index = this.rand.nextInt (this.sum) + 1;'. Le paquet 'Random' n'a pas de fonction équivalente pour générer' doubles' entre 0 et un maximum donné. De plus, ajouter 1 à la somme n'est évidemment pas correct - mais il n'est pas évident quelle constante j'ajouterais à la somme pour s'assurer que l'élément de poids maximum puisse être sélectionné. – Karen
Multipliez 'rand.nextDouble()' par la somme, et n'ajoutez rien. –