Hola al otro lado de la pantalla. Cualquiera de nosotros, tarde o temprano, se enfrenta a la necesidad de generar un número aleatorio en un rango determinado, ya sea un número real o un número entero. ¿Para qué? De hecho, esto no es importante, podría ser una función para calcular la probabilidad de desencadenar algún evento, obtener un multiplicador aleatorio o cualquier otro. Entonces, descubrimos por qué es necesario esto, es decir, para cualquier cosa :) De hecho, existen muchos métodos para obtener un número pseudoaleatorio, pero daré un ejemplo con la clase
Math
, es decir, el método random()
; ¿Que tenemos? Llamar al método Math.random()
devuelve un número real pseudoaleatorio ( double
) del rango [0;1)
, es decir, de 0 a 1 excluyendo 1, lo que significa que el número máximo en el rango es 0,99999999999... Bien, tenemos un número pseudoaleatorio, pero ¿Qué pasa si necesitamos nuestra propia gama? Por ejemplo, ¿necesitamos un número pseudoaleatorio del rango [0;100)? Escribimos el código:
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;
}
No salió mal, pero max
(en nuestro caso) todavía no lo conseguiremos. Para obtener un número aleatorio en el rango [0;100] necesitamos sumar max
1 al nuestro y luego convertirlo a un número entero como int
o long
(dependiendo de los rangos que usará). Escribimos el código:
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);
}
Nota: Como puede ver, la variable máxima se incrementó en la forma del prefijo. (Si no sabes qué es esto, te aconsejo que leas mi artículo ) Genial, obtuvimos lo que queríamos, pero si necesitamos un rango no desde 0, sino por ejemplo [10;75] Escribimos el código:
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;
}
Analizando el código del método rnd
:
Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
El número máximo después del cálculo es 65. El número real pseudoaleatorio (por ejemplo) es 0,18283417347179454 (se obtuvo llamando a Math.random()
). El número máximo se incrementó con una forma de prefijo antes de la multiplicación. El número máximo ahora es 66. Multiplica 0,18283417347179454 por 66. El resultado de la multiplicación es 12,06705544913844. Convertimos el resultado de multiplicar el número máximo por un número real pseudoaleatorio a tipo entero int
. Agregamos el número mínimo al resultado transformado que es igual a 12. Devolvemos el resultado: 22 Como se puede ver en el análisis, incluso si el número real pseudoaleatorio es igual a cero, como resultado devolveremos nuestro mínimo. de sumar nuestro número mínimo con el resultado de la multiplicación. Espero que esto haya sido útil e informativo para usted. Buena suerte dominando Java;) Un par de artículos más: ¿Qué es incrementar y disminuir? El operador de división de módulo.
GO TO FULL VERSION