Generer un nombre réel aleatoirement en java
Résolu
Bonjour
aider moi svp je besoin d'un code java qui permet de générer aléatoirement une valeur réel entre l'intervalle[0.5 , 0.85] .
aider moi svp je besoin d'un code java qui permet de générer aléatoirement une valeur réel entre l'intervalle[0.5 , 0.85] .
3 réponses
-
ModérateurDans la mesure où tu veux limiter le nombre de décimales, l'idée de BittarAhmad de considérer qu'au final 0.50 et 0.85 ne sont que les entiers 50 et 85 que l'on aurait divisé par 100, ça permet de faire de la génération aléatoire d'entiers :
private static final java.util.Random random = new java.util.Random(); public static double alea(double minInclus, double maxInclus, double precision) { long min = Math.round(minInclus/precision); long max = Math.round(maxInclus/precision); long delta = max-min+1; if (delta > Integer.MAX_VALUE) throw new IllegalArgumentException("La précision est trop importante !"); long val = min+random.nextInt((int) delta); return val*precision; }
Voici un exemple d'utilisation qui va générer un million de valeurs aléatoires et afficher leur fréquence d'apparition. Comme on s'y attend on a bien environ 2.78% pour chacune des valeurs entre 0.50 et 0.85 :
public static void main(String[] args) { java.util.Map<Double,Integer> map = new java.util.TreeMap<Double,Integer>(); for (int i=0; i<1e6; i++) { Double x = alea(0.50, 0.85, 0.01); Integer freq = map.get(x); map.put(x, freq==null ? 1 : freq+1); } System.out.println("valeur\tfréquence"); for (java.util.Map.Entry<Double, Integer> entry : map.entrySet()) System.out.println(entry.getKey()+"\t"+entry.getValue()/1e4); } -
Contributeur sécuritéBonjour,
Tu peux utiliser ça : https://www.developpez.net/forums/d75341/java/general-java/api-standards-tierces/collection-stream/math-random-generation-nombre-aleatoire-compris-entre-bornes/
Ou math.random() :
http://www.tutorialspoint.com/java/lang/math_random.htm
En modifiant les bornes pour faire ce que tu veux.
++-
-
Contributeur sécurité@ENETCOMBen oui je ne vois pas le problème ?
Math.Random() renvoie une valeur entre 0 et 1, donc par exemple
0,85*(math.random()) renvoie une valeur entre 0 et 0,85 et si tu continues a modifier tu obtiens une valeur entre 0,5 et 0,85 -
-
Contributeur sécurité
-
@ENETCOMhigher:0.85 !!!!
lower:0.5 !!!!
-
-
Bonjour à tous,
Oui si tu veux générer un nombre aléatoire entre 0.5 0.85 (0.5 inclus et 0.85 inclus), tu peux tout d'abord générer un nombre aléatoire entre 50 et 85, à la fin du divise sur 100.
Voici un code permettant de générer un nombre aléatoire entre [0.5 0.85]:
Random r = new Random();
int valeurmin= 50; //0.5*100
int valeurmax= 85; //0.85*100
int difference = valeurmax-valeurmin;
difference=difference+1; //pour avoir 0.85 inclus aussi
int valeur = valeurmin + r.nextInt( difference); //tu obtient une valeur entre
[50 85]
float valeur1= (float)valeur;
float mu= valeur1/100; //si par exemple tu obtient aléatoirement la valeur
75, donc la valeur 1 sera 0.75 appartenant à [0.5 0.85].
Bon courage,