3783 votes

Comment générer des nombres entiers aléatoires dans une plage spécifique en Java ?

Comment puis-je générer un échantillon aléatoire int dans une fourchette spécifique ?

J'ai essayé les éléments suivants, mais ils ne fonctionnent pas :

Tentative 1 :

randomNum = minimum + (int)(Math.random() * maximum);

Bug : randomNum peut être plus grande que maximum .

Tentative 2 :

Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum =  minimum + i;

Bug : randomNum peut être plus petite que minimum .

0 votes

Lorsque vous avez besoin d'un grand nombre de nombres aléatoires, je ne recommande pas la classe Random de l'API. Elle a juste une période trop petite. Essayez la classe Torsion de Mersenne au lieu de cela. Il y a une implémentation Java .

20 votes

Avant de poster une nouvelle réponse, pensez qu'il y a déjà plus de 65 réponses à cette question. Veillez à ce que votre réponse apporte des informations qui ne figurent pas parmi les réponses existantes.

0 votes

randomNum = minimum + (int)(Math.random() * (maximum - minimum);

27voto

Pawan mishra Points 878

Générer un nombre aléatoire pour la différence entre min et max en utilisant la fonction nextint(n) et ajoutez ensuite le numéro min au résultat :

Random rn = new Random();
int result = rn.nextInt(max - min + 1) + min;
System.out.println(result);

27voto

Oleksandr Points 7545

A partir de Java 7, vous ne devez plus utiliser Random . Pour la plupart des utilisations, le générateur de nombres aléatoires de choix est maintenant ThreadLocalRandom .

Pour les pools de jointures à fourche et les parallèles, utilisez SplittableRandom .

Joshua Bloch. Effective Java. Troisième édition.

À partir de Java 8

Pour les fork join pools et les flux parallèles, utilisez SplittableRandom qui est généralement plus rapide, a de meilleures propriétés d'indépendance statistique et d'uniformité par rapport à Random .

Pour générer une valeur aléatoire int dans la gamme [0, 1_000]:

int n = new SplittableRandom().nextInt(0, 1_001);

Pour générer une valeur aléatoire int[100] tableau de valeurs dans l'intervalle [0, 1_000]:

int[] a = new SplittableRandom().ints(100, 0, 1_001).parallel().toArray();

Pour renvoyer un flux de valeurs aléatoires :

IntStream stream = new SplittableRandom().ints(100, 0, 1_001);

22voto

Prof Mo Points 74

Il suffit d'utiliser le Random classe :

Random ran = new Random();
// Assumes max and min are non-negative.
int randomInt = min + ran.nextInt(max - min + 1);

21voto

Lawakush Kurmi Points 1059

Pour générer un nombre aléatoire "entre deux nombres", utilisez le code suivant :

Random r = new Random();
int lowerBound = 1;
int upperBound = 11;
int result = r.nextInt(upperBound-lowerBound) + lowerBound;

Vous obtenez ainsi un nombre aléatoire compris entre 1 (inclus) et 11 (exclus). Initialisez donc la valeur de upperBound en ajoutant 1. Par exemple, si vous souhaitez générer un nombre aléatoire compris entre 1 et 10, initialisez la valeur de upperBound avec 11 au lieu de 10.

20voto

Luke Taylor Points 3032

Cette méthode peut être pratique à utiliser :

Cette méthode renvoie un nombre aléatoire entre les valeurs min et max fournies :

public static int getRandomNumberBetween(int min, int max) {
    Random foo = new Random();
    int randomNumber = foo.nextInt(max - min) + min;
    if (randomNumber == min) {
        // Since the random number is between the min and max values, simply add 1
        return min + 1;
    } else {
        return randomNumber;
    }
}

et cette méthode retournera un nombre aléatoire de les valeurs min et max fournies (le nombre généré peut donc aussi être le nombre min ou max) :

public static int getRandomNumberFrom(int min, int max) {
    Random foo = new Random();
    int randomNumber = foo.nextInt((max + 1) - min) + min;

    return randomNumber;
}

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