web-dev-qa-db-fra.com

Comment générer un entier aléatoire entre min et max en java?

Quelle méthode retourne un int aléatoire entre min et max? Ou est-ce qu'une telle méthode n'existe pas?

Ce que je recherche, c'est quelque chose comme ça: 

NAMEOFMETHOD (min, max) 

(où min et max sont ints) 

ça retourne quelque chose comme ça: 

8

(au hasard) 

Si une telle méthode existe, pouvez-vous créer un lien vers la documentation correspondante avec votre réponse. Merci. 

Mise à jour: essayant d'implémenter la solution complète dans la prochaine réponse, j'ai ceci: 

class TestR
{
    public static void main (String[]arg) 
    {   
        Random random = new Random() ;
        int randomNumber = random.nextInt(5) + 2;
        System.out.println (randomNumber) ; 
    } 
} 

J'ai toujours les mêmes erreurs du complier: 

TestR.Java:5: cannot find symbol
symbol  : class Random
location: class TestR
        Random random = new Random() ;
        ^
TestR.Java:5: cannot find symbol
symbol  : class Random
location: class TestR
        Random random = new Random() ;
                            ^
TestR.Java:6: operator + cannot be applied to Random.nextInt,int
        int randomNumber = random.nextInt(5) + 2;
                                         ^
TestR.Java:6: incompatible types
found   : <nulltype>
required: int
        int randomNumber = random.nextInt(5) + 2;
                                             ^
4 errors

Qu'est-ce qui ne va pas ici? 

37
David

Construire un objet aléatoire au démarrage de l'application:

Random random = new Random();

Ensuite, utilisez Random.nextInt (int) :

int randomNumber = random.nextInt(max + 1 - min) + min;

Notez que les limites inférieure et supérieure sont inclusives.

119
Mark Byers

Vous pouvez utiliser Random.nextInt (n) . Ceci retourne un int aléatoire dans [0, n). En utilisant max-min + 1 au lieu de n et en ajoutant min à la réponse, vous obtiendrez une valeur dans la plage souhaitée. 

16
MAK
public static int random_int(int Min, int Max)
{
     return (int) (Math.random()*(Max-Min))+Min;
}

random_int(5, 9); // For example
5
Jupiter Kasparov

Comme les solutions ci-dessus ne considèrent pas le débordement possible de max-min lorsque min est négatif, voici une autre solution (similaire à celle de kerouac)

public static int getRandom(int min, int max) {
    if (min > max) {
        throw new IllegalArgumentException("Min " + min + " greater than max " + max);
    }      
    return (int) ( (long) min + Math.random() * ((long)max - min + 1));
}

cela fonctionne même si vous l'appelez avec:

getRandom(Integer.MIN_VALUE, Integer.MAX_VALUE) 
4
arcuri82

L'utilisation de la classe Random est le chemin à suivre suggéré dans la réponse acceptée, mais voici une façon correcte de le faire si vous ne voulez pas créer un nouvel objet Random: 

min + (int) (Math.random() * (max - min + 1));
0
kerouac

Avec Java 7 ou supérieur, vous pouvez utiliser

ThreadLocalRandom.current().nextInt(int Origin, int bound)

Javadoc: ThreadLocalRandom.nextInt

0
palacsint