JavaRush /Blog Java /Random-FR /Générer un nombre aléatoire dans une plage donnée
L2CCCP
Niveau 9

Générer un nombre aléatoire dans une plage donnée

Publié dans le groupe Random-FR
Bonjour de l'autre côté de l'écran. Chacun d'entre nous est tôt ou tard confronté au besoin de générer un nombre aléatoire dans une plage donnée, qu'il s'agisse d'un nombre réel ou d'un nombre entier. Générer un nombre aléatoire dans une plage donnée - 1Pour quoi? En fait, ce n'est pas important, il peut s'agir d'une fonction permettant de calculer la probabilité de déclencher un événement, d'obtenir un multiplicateur aléatoire ou tout autre. Nous avons donc compris pourquoi cela est nécessaire, à savoir pour n'importe quoi :) En fait, il existe de nombreuses méthodes pour obtenir un nombre pseudo-aléatoire, mais je vais donner un exemple avec la classe Math, à savoir la méthode random(); Qu'avons-nous ? L'appel de la méthode Math.random()renvoie un nombre réel pseudo-aléatoire ( double) de la plage [0;1), c'est-à-dire de 0 à 1 excluant 1, ce qui signifie que le nombre maximum dans la plage est 0,99999999999... D'accord, nous avons un nombre pseudo-aléatoire, mais et si nous avions besoin de notre propre gamme ? Par exemple, avons-nous besoin d’un nombre pseudo-aléatoire compris dans la plage [0 ; 100) ? Nous écrivons le code :
public static void main(String... args)
{
	final double max = 100.; // Максимальное число для диапазона от 0 до max
	final double rnd = rnd(max);

	System.out.println("Псевдослучайное вещественное число: " + rnd);
}

/**
 * Метод получения псевдослучайного вещественного числа от 0 до max (исключая max);
 */
public static double rnd(final double max)
{
	return Math.random() * max;
}
Cela s’est avéré pas mal, mais max(dans notre cas) nous n’y parviendrons toujours pas. Afin d'obtenir un nombre aléatoire dans la plage [0;100], nous devons ajouter max1 au nôtre, puis le convertir en un entier comme intou long(selon les plages que vous utiliserez). Nous écrivons le code :
public static void main(String... args)
{
	final int max = 100; // Максимальное число для диапазона от 0 до max
	final int rnd = rnd(max);

	System.out.println("Псевдослучайное целое число: " + rnd);
}

/**
 * Метод получения псевдослучайного целого числа от 0 до max (включая max);
 */
public static int rnd(int max)
{
	return (int) (Math.random() * ++max);
}
Remarque : Comme vous pouvez le constater, la variable max a été incrémentée par le formulaire de préfixe. (Si vous ne savez pas ce que c'est, je vous conseille de lire mon article ) Super, nous avons obtenu ce que nous voulions, mais si nous avons besoin d'une plage non pas de 0, mais par exemple [10;75] Nous écrivons le code :
public static void main(String... args)
{
	final int min = 10; // Минимальное число для диапазона
	final int max = 75; // Максимальное число для диапазона
	final int rnd = rnd(min, max);

	System.out.println("Псевдослучайное целое число: " + rnd);
}

/**
 * Метод получения псевдослучайного целого числа от min до max (включая max);
 */
public static int rnd(int min, int max)
{
	max -= min;
	return (int) (Math.random() * ++max) + min;
}
Analyser le code de la méthodernd :

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
Le nombre maximum après calcul est de 65. Le nombre réel pseudo-aléatoire (par exemple) est 0,18283417347179454 (a été obtenu en appelant Math.random()). Le nombre maximum a été incrémenté avec une forme de préfixe avant la multiplication. Le nombre maximum est maintenant de 66. Multipliez 0,18283417347179454 par 66. Le résultat de la multiplication est 12,06705544913844. Nous convertissons le résultat de la multiplication du nombre maximum par un nombre réel pseudo-aléatoire en un type entier int. Nous ajoutons le nombre minimum au résultat transformé qui est égal à 12. Nous renvoyons le résultat : 22 Comme le montre l'analyse, même si le nombre réel pseudo-aléatoire est égal à zéro, nous renverrons en conséquence notre minimum d'ajouter notre nombre minimum avec le résultat de la multiplication. J'espère que cela vous a été utile et instructif. Bonne chance pour maîtriser Java ;) Quelques autres de mes articles : Qu'est-ce que l'incrémentation et la décrémentation L'opérateur de division modulo
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION