526 votes

Obtenir des nombres aléatoires en Java

Je voudrais obtenir une valeur aléatoire entre 1 et 50 en Java.

Comment puis-je le faire avec l'aide de Math.random(); ?

Comment puis-je lier les valeurs que Math.random() des retours ?

2 votes

Il serait préférable d'utiliser Random au lieu de Math.random. Random est plus efficace et moins biaisé.

831voto

n_yanev Points 1853

La première solution est d'utiliser le java.util.Random classe :

import java.util.Random;

Random rand = new Random();

// Obtain a number between [0 - 49].
int n = rand.nextInt(50);

// Add 1 to the result to get a number from the required range
// (i.e., [1 - 50]).
n += 1;

Une autre solution consiste à utiliser Math.random() :

double random = Math.random() * 49 + 1;

ou

int random = (int)(Math.random() * 50 + 1);

5 votes

Donc si je prends 45 comme minimum et rand.nextInt(50) retourne 30, j'obtiens une valeur entre 45 et 50 ? Uhm... ok...

63 votes

La confusion de @DanielF est compréhensible car le commentaire dans la réponse est trompeur. Les 50 dans rand.nextInt(50) ne donnera que le maximum dans cette situation. rand.nextInt(50) retournera un nombre entier compris entre 0 (inclusivement) et 50 (exclusivement) (en d'autres termes [0-49]). Nous ajoutons 1 pour obtenir [1-50]. Ainsi, si vous prenez 45 comme minimum et l'ajoutez à rand.nextInt(50), vous obtiendrez une valeur comprise entre 45 et 94 inclusivement.

7 votes

@The_Rafi En effet. rand.nextInt(1) ne retournera que 0, et non 1 ou 0.

616voto

zengr Points 14506
int max = 50;
int min = 1;

1. Utilisation de Math.random()

double random = Math.random() * 49 + 1;
or
int random = (int )(Math.random() * 50 + 1);

Cela vous donnera une valeur de 1 à 50 dans le cas de int ou 1.0 (inclus) à 50.0 (exclus) dans le cas d'un double

Pourquoi ?

La méthode random() renvoie une valeur aléatoire aléatoire entre 0,0 et 0,9..., il faut alors le multipliez par 50, donc la limite supérieure devient 0.0 à 49.999... quand vous ajoutez 1, cela devient 1.0 à 50.999..., maintenant quand vous tronquez en int, vous obtenez 1 à 50. (merci à @rup dans les commentaires). de leepoint une rédaction impressionnante sur les deux approches.

2. Utilisation de la classe Random en Java.

Random rand = new Random(); 
int value = rand.nextInt(50); 

Cela donnera une valeur de 0 à 49.

De 1 à 50 ans : rand.nextInt((max - min) + 1) + min;

Source : de quelque Java Random awesomeness.

1 votes

"0,0 à 50,0, quand on ajoute 1, cela devient 1,0 à 50,0" n'est sûrement pas correct ? Il doit y avoir 49 ou 51 quelque part.

8 votes

@Blorgbeard la citation est fausse ; le résultat est supérieur ou égal à 0 mais strictement inférieur à 1 ([documentation]( [download.oracle.com/javase/6/docs/api/java/lang/](http://download.oracle.com/javase/6/docs/api/java/lang/Math.html#random()) ). Donc c'est 0.0 à 49.999 etc. qui devient 1 à 50.999 etc. quand on ajoute 1, qui devient 1 à 50 quand on tronque à int.

0 votes

Il ne fonctionne pas pour toutes les plages par exemple il me donne 31 quand j'ai essayé d'obtenir un nombre entre 28 et 7

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X