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 int
s)
ç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?
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.
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.
public static int random_int(int Min, int Max)
{
return (int) (Math.random()*(Max-Min))+Min;
}
random_int(5, 9); // For example
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)
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));
Avec Java 7 ou supérieur, vous pouvez utiliser
ThreadLocalRandom.current().nextInt(int Origin, int bound)
Javadoc: ThreadLocalRandom.nextInt