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);

116voto

Bill the Lizard Points 147311

Vous pouvez modifier votre deuxième exemple de code pour :

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

105voto

hexabunny Points 11

Une petite modification de votre première solution suffirait.

Random rand = new Random();
randomNum = minimum + rand.nextInt((maximum - minimum) + 1);

Voir plus ici pour la mise en œuvre de Random

90voto

andrew Points 347

ThreadLocalRandom équivalent de la classe java.util.Random pour un environnement multithread. La génération d'un nombre aléatoire est effectuée localement dans chacun des threads. On obtient ainsi une meilleure performance en réduisant les conflits.

int rand = ThreadLocalRandom.current().nextInt(x,y);

x , y - intervalles, par exemple (1,10)

74voto

Matt R Points 765

Le site Math.Random classe dans Java est basé sur 0. Donc, si vous écrivez quelque chose comme ceci :

Random rand = new Random();
int x = rand.nextInt(10);

x se situera entre 0-9 inclusive.

Ainsi, étant donné le tableau suivant de 25 le code permettant de générer un nombre aléatoire entre 0 (la base du tableau) et array.length serait :

String[] i = new String[25];
Random rand = new Random();
int index = 0;

index = rand.nextInt( i.length );

Depuis i.length retournera 25 le nextInt( i.length ) retournera un nombre compris entre l'intervalle de 0-24 . L'autre option est d'opter pour Math.Random qui fonctionne de la même manière.

index = (int) Math.floor(Math.random() * i.length);

Pour mieux comprendre, consultez le message du forum Intervalles aléatoires (archive.org) .

54voto

Vous pouvez le faire en faisant simplement la déclaration :

Randomizer.generate(0,10); //min of zero, max of ten

Voici son code source

Randomizer.java

public class Randomizer {
    public static int generate(int min,int max) {
        return min + (int)(Math.random() * ((max - min) + 1));
    }
}

C'est juste propre et simple.

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