J'ai une énumération que je voudrais sélectionner aléatoirement, mais pas vraiment aléatoire. J'aimerais que certaines valeurs soient moins susceptibles d'être sélectionnées jusqu'à maintenant. Voici ce que j'ai jusqu'à présent ...Valeur aléatoire d'enum avec probabilité
private enum Type{
TYPE_A, TYPE_B, TYPE_C, TYPE_D, TYPE_E;
private static final List<Type> VALUES =
Collections.unmodifiableList(Arrays.asList(values()));
private static final int SIZE = VALUES.size();
private static final Random RANDOM = new Random();
public static Type randomType() {
return VALUES.get(RANDOM.nextInt(SIZE));
}
}
Existe-t-il un moyen efficace d'attribuer des probabilités à chacune de ces valeurs?
code trouvé de here
Je pense que vous avez mal compris. L'idée est - vous somm tous les poids. Maintenant, imaginez une règle avec max = valeur calculée. Maintenant, dash chaque poids sur cette règle, donc d'abord sera (selon mon exemple en réponse) 0 à 10, deuxième 10 à 11, troisième 11 à 16 et ainsi de suite. Maintenant pointez votre doigt vers l'endroit aléatoire de notre règle et voyez dans quel segment vous pointez. Réponse éditée –
C'est en fait ce que j'ai fini par faire. Merci! – tgrosinger
BTW vous pouvez améliorer perfomance si précalculer les limites de vous tapez dans le constructeur, mais sur cinq types ce n'est pas réel. –