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

19voto

user2427 Points 2747
int random = minimum + Double.valueOf(Math.random()*(maximum-minimum )).intValue();

Vous pouvez aussi jeter un coup d'oeil à RandomUtils de Apache Commons .

19voto

sam Points 81

Dans le cas d'un lancer de dé, il s'agirait d'un nombre aléatoire compris entre 1 et 6 (et non pas entre 0 et 6) :

face = 1 + randomNumbers.nextInt(6);

18voto

Garrett Hall Points 11902

Voici une classe utile pour générer des données aléatoires ints dans un intervalle avec une combinaison quelconque de limites inclusives/exclusives :

import java.util.Random;

public class RandomRange extends Random {
    public int nextIncInc(int min, int max) {
        return nextInt(max - min + 1) + min;
    }

    public int nextExcInc(int min, int max) {
        return nextInt(max - min) + 1 + min;
    }

    public int nextExcExc(int min, int max) {
        return nextInt(max - min - 1) + 1 + min;
    }

    public int nextIncExc(int min, int max) {
        return nextInt(max - min) + min;
    }
}

18voto

Mulalo Madida Points 261

Vous pouvez réaliser cela de manière concise en Java 8 :

Random random = new Random();

int max = 10;
int min = 5;
int totalNumber = 10;

IntStream stream = random.ints(totalNumber, min, max);
stream.forEach(System.out::println);

17voto

AZ_ Points 7127
public static Random RANDOM = new Random(System.nanoTime());

public static final float random(final float pMin, final float pMax) {
    return pMin + RANDOM.nextFloat() * (pMax - pMin);
}

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