JeuWeb - Crée ton jeu par navigateur
[Java] Nombre aléatoire entre 2 bornes incluses ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Java] Nombre aléatoire entre 2 bornes incluses ? (/showthread.php?tid=4909)



[Java] Nombre aléatoire entre 2 bornes incluses ? - Argorate - 02-05-2013

Bonjour,

quelqu'un pourrait m'aider parce que je m'embrouille tout seul à force d'y réfléchir.
Si j'ai bien lu, le Math.random() de java envoi un chiffre 0 <= X < 1.

Quelqu'un a t-il le code d'une fonction qui fait pareil que mt_rand() de php, à savoir:

deux param, les deux bornes chacune incluse et qui reste équiprobable?

merci.


RE: [JAVA] random() like php? - Sephi-Chan - 02-05-2013

La classe Random à l'air de faire le job :


int min, max;
Random rand;
rand.nextInt((max + 1) - min) + min;


Plutôt que de chercher "comme en PHP", essaye de mettre des mots sur ton besoin. Lorsque j'ai commencé à saisir "java random number" dans Google, il m'a automatiquement suggéré "within range". Les posts sur Stack Overflow sont légion et il a seulement fallu faire attention à l'aspect inclusive/exclusive des bornes (en se fiant aux commentaires).


RE: [Java] Nombre aléatoire entre 2 bornes incluses ? - Argorate - 02-05-2013

Le problème c'est que j'ai trouvé cette formule mais avec Math.random() et des gens qui parlaient du fait que le premier nombre et le dernier avait 50% de chance de moins de sortir ou je ne sais plus quoi, bref c'était pas clair.
Mais j'avoue que j'avais pas regardé s'il y avait d'autres méthodes, faut dire que des gens qui disent s'y connaitre en java m'en ont jamais parlé, c'était tout le temps "Math.random()".

Je vais voir ce que ça donne, merci.

PS: "deux param, les deux bornes chacune incluse et qui reste équiprobable?" c'est pas des mots sur le besoins ça? ^^


RE: [Java] Nombre aléatoire entre 2 bornes incluses ? - Xenos - 02-05-2013

C'est le rand() modulo X qui pose des soucis de non-équiprobabilité si le modulo n'est pas un diviseur de MAX_RAND.
Il se peut (j'en sais rien, je te laisse vérifier) que parseInt utilise ce système de modulo et donc, il n'est peut-etre pas exactement équilibré.
Egalement, le problème survient si tu utilises l'arrondis du rand() (décimal):
round(rand()*K)
Le nombre "0" sera tiré si rand() vaut entre 0 et 1/2K. Le nombre 1 sera tiré si rand() vaut entre 1/2K et 3/2K.
Donc, la "plage" de nombres pour 0 est 2x plus grande que pour 1: 0 a 50% de chances de moins d'être tiré que les autres nombres.

Pour compléter Sephi, en utilisant Math.random():
Code :
double x = Math.random()*(max + 1 - min) + min;
// x vaut de min inclus à max+1 exclus, et x est équiprobable mais décimal
int y = floor(x);
// y est un entier de 0 inclus à max+1 exclus (donc, à max inclus), et est équiprobable



RE: [Java] Nombre aléatoire entre 2 bornes incluses ? - Sephi-Chan - 02-05-2013

(02-05-2013, 12:22 PM)Argorate a écrit : PS: "deux param, les deux bornes chacune incluse et qui reste équiprobable?" c'est pas des mots sur le besoins ça? ^^

C'est à Google qu'il faut donner ces mots clés. Après, c'est surtout pour toi : en apprenant à chercher sur Google, tu te débloquerais sur le champ. Wink