web-dev-qa-db-fra.com

Probabilité en Java

J'étais curieux de savoir, comment implémenter la probabilité en Java? Par exemple, si les chances qu'une variable s'affiche soient de 1/25, comment pourrais-je l'implémenter? Ou toute autre probabilité? Veuillez m'orienter dans la direction générale.

34
Jeel Shah

Vous utiliseriez Random pour générer un nombre aléatoire, puis le tester par rapport à un littéral pour correspondre à la probabilité que vous essayez d'atteindre.

Donc donné:

boolean val = new Random().nextInt(25)==0;

val aura une probabilité de 1/25 d'être vrai (puisque nextInt() a une probabilité égale de retourner n'importe quel nombre commençant à 0 et jusqu'à, mais sans inclure, 25.)

Vous devrez bien sûr également import Java.util.Random;.

Comme indiqué ci-dessous, si vous obtenez plusieurs nombres aléatoires, il serait plus efficace de réutiliser l'objet aléatoire plutôt que de le recréer tout le temps:

Random Rand = new Random();
boolean val = Rand.nextInt(25)==0;

..

boolean val2 = Rand.nextInt(25)==0;
59
Michael Berry

En général, vous utilisez un générateur de nombres aléatoires. La plupart de ceux-ci renvoient un nombre dans l'intervalle [0,1], vous devriez donc vérifier si ce nombre est <= 0,04 ou non.

if( new Random().nextDouble() <= 0.04 ) {  //you might want to cache the Random instance
   //we hit the 1/25 ( 4% ) case.
}

Ou

if( Math.random() <= 0.04 ) {
  //we hit the 1/25 ( 4% ) case.
}

Notez qu'il existe plusieurs générateurs de nombres aléatoires qui ont des propriétés différentes, mais pour les applications simples, la classe Random devrait être suffisante.

30
Thomas

Java a une classe appelée Java.util.Random qui peut générer des nombres aléatoires. Si vous voulez que quelque chose se produise avec une probabilité 1/25, générez simplement un nombre aléatoire entre 1 et 25 (ou 0 et 24 inclus) et vérifiez si ce nombre est égal à 1.

if(new Java.util.Random().nextInt(25)==0){
    //Do something.
}
5
Jack Edmonds

Depuis 1.7, il est préférable d'utiliser (dans un environnement simultané au moins):

ThreadLocalRandom.current().nextInt(25) == 0

Javadoc

Un générateur de nombres aléatoires isolé du thread actuel. Comme le générateur aléatoire global utilisé par la classe Math, un ThreadLocalRandom est initialisé avec une valeur de départ générée en interne qui ne peut pas être modifiée autrement. Le cas échéant, l'utilisation de ThreadLocalRandom plutôt que des objets Random partagés dans des programmes simultanés rencontrera généralement beaucoup moins de surcharge et de conflits. L'utilisation de ThreadLocalRandom est particulièrement appropriée lorsque plusieurs tâches (par exemple, chacune une ForkJoinTask) utilisent des nombres aléatoires en parallèle dans les pools de threads. Les utilisations de cette classe doivent généralement prendre la forme: ThreadLocalRandom.current (). NextX (...) (où X est Int, Long, etc.). Lorsque toutes les utilisations sont de cette forme, il n'est jamais possible de partager accidentellement un ThreadLocalRandom sur plusieurs threads.

Cette classe fournit également des méthodes de génération aléatoire bornées supplémentaires couramment utilisées.

5
Wald

Vous pouvez peut-être implémenter cela en générant des nombres aléatoires.

  Random rn = new Random();
    double d = rn.nextDouble();     // random value in range 0.0 - 1.0
    if(d<=0.04){
    doSomeThing();
    }
3
narek.gevorgyan