Generar números aleatorios en un rango

JavaJavaBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Java proporciona varios métodos incorporados para generar números aleatorios en sus clases Math y Random. Sin embargo, generar números aleatorios en un rango puede ser desafiante. En este laboratorio, aprenderá diferentes métodos para generar números aleatorios en un rango, que incluyen:


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/output("Output") java/BasicSyntaxGroup -.-> java/math("Math") java/ProgrammingTechniquesGroup -.-> java/method_overloading("Method Overloading") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/FileandIOManagementGroup -.-> java/stream("Stream") java/SystemandDataProcessingGroup -.-> java/math_methods("Math Methods") subgraph Lab Skills java/output -.-> lab-117409{{"Generar números aleatorios en un rango"}} java/math -.-> lab-117409{{"Generar números aleatorios en un rango"}} java/method_overloading -.-> lab-117409{{"Generar números aleatorios en un rango"}} java/classes_objects -.-> lab-117409{{"Generar números aleatorios en un rango"}} java/stream -.-> lab-117409{{"Generar números aleatorios en un rango"}} java/math_methods -.-> lab-117409{{"Generar números aleatorios en un rango"}} end

Generador de números aleatorios utilizando la clase Math

Podemos utilizar el método Math.random() para generar un valor de tipo float entre 0 y 1, lo cual es adecuado para generar números aleatorios. Sin embargo, es desafiante generar valores de tipo float en un rango particular.

En este método, generaremos un número aleatorio entre min y max (incluyendo min y excluyendo max) aprovechando la fórmula del método Math.random().

Aquí está el ejemplo de código:

public static int randomNumberGenerator(int min, int max) {
    double r = Math.random();
    int randomNum = (int) (r * (max - min)) + min;
    return randomNum;
}

Para utilizar este método, invoque el método randomNumberGenerator() y pase los argumentos enteros del rango mínimo y máximo; el método devolverá un número entero aleatorio dentro del rango.

Aquí está el código que utiliza randomNumberGenerator() para generar dos números aleatorios; el primero debe estar en el rango de 5 a 105 y el segundo en el rango de 2199 a 2200.

int r1 = randomNumberGenerator(5, 105);
int r2 = randomNumberGenerator(2199, 2200);

Para ejecutar este método, ejecute los siguientes comandos en su terminal:

$ cd proyecto
$ touch RandomNumbers.java
// pegue el código
$ javac RandomNumbers.java
$ java RandomNumbers

Generador de números aleatorios utilizando la clase Random

Otra forma de generar números aleatorios dentro de un rango específico es utilizar el método nextInt() de la clase Random.

El método nextInt() genera un valor entero en el rango [0, n).

public static int randomNumberGenerator(int min, int max) {
    Random r = new Random();
    int randomNum = r.nextInt(max - min) + min;
    return randomNum;
}

Este método toma los parámetros min y max y devuelve un número entero aleatorio entre el rango especificado. En este método, nextInt() produce un número aleatorio entre 0 y (max - min), y luego sumamos el valor de min para obtener el número aleatorio final.

Aquí está el código que utiliza randomNumberGenerator() para generar dos números aleatorios; el primero debe estar en el rango de 500 a 2000, y el segundo debe estar en el rango de 500 a 501.

int randomNum1 = randomNumberGenerator(500, 2000);
int randomNum2 = randomNumberGenerator(500, 501);

Para ejecutar este método, ejecute los siguientes comandos en su terminal:

$ cd proyecto
$ touch RandomNumbers.java
// pegue el código
$ javac RandomNumbers.java
$ java RandomNumbers

Usando el método ints() de la clase Random

También podemos utilizar el método ints() de la clase Random para generar un flujo de enteros aleatorios dentro de un rango.

Aquí está el código para generar el flujo:

Random r = new Random();
IntStream stream = r.ints(5, 100, 120);

Aquí, el método ints() toma tres parámetros. Primero, el parámetro count, que define cuántos enteros queremos generar, y el parámetro bound, que define el rango. Por ejemplo, en nuestro código, el parámetro bound va de 100 a 120. Es un parámetro mínimo inclusivo (100) y máximo exclusivo (120).

Después de crear este flujo, podemos consumirlo utilizando forEach() o recopilarlo en una colección como una Lista o un arreglo.

Aquí está el código que utiliza el método ints() para generar cinco enteros aleatorios entre 150 y 2000:

int min = 150; //definiendo el rango mínimo
int max = 2000; //definiendo el rango máximo

Random r = new Random();
IntStream stream = r.ints(5, min, max);//Generando el flujo aleatorio
int randomNum = stream.findFirst().getAsInt();//Obteniendo el primer valor del flujo

System.out.print("El número aleatorio es: " + randomNum);//Imprimiendo el número aleatorio

Para ejecutar este método, ejecute los siguientes comandos en su terminal:

$ cd proyecto
$ touch RandomNumbers.java
// pegue el código
$ javac RandomNumbers.java
$ java RandomNumbers

Resumen

Generar números aleatorios en un rango específico en Java es esencial para varias aplicaciones. En este laboratorio, aprendiste varios métodos de generar números aleatorios en un rango, como utilizar Math.random(), Random.nextInt() y Random.ints(). Cada método tiene sus pros y contras, y debes elegir el que se ajuste mejor a tus necesidades.