Generar números aleatorios en Java: Guía práctica con Random y Math.random
En este tutorial conciso aprenderás a producir valores aleatorios en Java usando los dos enfoques más comunes: java.util.Random y Math.random(). Ambos son parte del JDK, pero cada uno sirve casos de uso ligeramente diferentes y ofrece características únicas.
- java.util.Random – Genera números de cualquier tipo primitivo y puede sembrarse para reproducibilidad.
- Math.random() – Proporciona una forma rápida de obtener un double en el rango [0.0, 1.0) sin crear un objeto.
Generación de números aleatorios con java.util.Random
La clase Random puede producir valores int, long, float, double y boolean. Instánciala una vez y reutiliza el mismo objeto para evitar sobrecarga de rendimiento.
A continuación se muestra un ejemplo completo que genera diez enteros aleatorios entre 0 y 99 (inclusive). Si necesitas que el límite superior sea inclusivo, suma uno al argumento.
import java.util.Random;
public class NumerosAleatorios {
public static void main(String[] args) {
Random rng = new Random();
for (int i = 0; i < 10; i++) {
int numeroAleatorio = rng.nextInt(100); // 0-99
System.out.println("Número aleatorio: " + numeroAleatorio);
}
}
}
Salida típica:
Número aleatorio: 17 Número aleatorio: 57 Número aleatorio: 73 Número aleatorio: 48 Número aleatorio: 68 Número aleatorio: 86 Número aleatorio: 34 Número aleatorio: 97 Número aleatorio: 73 Número aleatorio: 18
Como Random es thread-safe para la mayoría de usos, puedes compartir la misma instancia entre múltiples hilos si es necesario. Para secuencias reproducibles, pasa una semilla: new Random(42).
Generación de números aleatorios con Math.random()
Cuando solo necesitas un double rápido en el rango [0.0, 1.0), Math.random() es conveniente. Internamente delega en una única instancia Random, por lo que es eficiente para cargas de trabajo pequeñas.
Ejemplo: generar diez valores double.
public class DemoAleatorio {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(Math.random());
}
}
}
Salida típica:
0.46518450373334297 0.14859851177803485 0.5628391820492477 0.6323378498048606 0.1740198445692248 0.9140544122258946 0.9167350036262347 0.49251219841030147 0.7426056725722353
Para generar enteros o doubles en un rango diferente, combina Math.random() con aritmética. Por ejemplo, para obtener un int aleatorio entre 1 y 10 inclusive: (int)(Math.random() * 10) + 1.
Conclusiones clave
- Usa
java.util.Randomcuando necesites variedad de tipos primitivos o secuencias deterministas mediante semilla. - Usa
Math.random()para doubles rápidos y puntuales en el intervalo [0.0, 1.0). - Siempre reutiliza la misma instancia
Randompara evitar sobrecarga de siembra repetida. - Para aleatoriedad thread-safe y alto rendimiento en entornos concurrentes, considera
ThreadLocalRandom(Java 7+).
Java
- Despliegue de aplicaciones Java EE en Microsoft Azure: guía paso a paso
- Interfaz List en Java: Visión general, implementaciones y métodos clave
- Java TreeMap: Domina Mapas Ordenados con Ejemplos Prácticos
- Dominando los Algoritmos de Colecciones de Java: Ordenación, Mezcla y Más
- Crear un array de objetos en Java: Guía paso a paso
- Método Java String length(): Cómo obtener el tamaño de un String (Ejemplo)
- Dominando el método compareTo() de Java String: Sintaxis, casos de uso y ejemplos prácticos
- Lectura de archivos en Java con BufferedReader – Guía práctica con ejemplos
- Convertir Char a String en Java – Ejemplos Prácticos y Mejores Prácticas
- Invertir una Cadena en Java Usando Recursión – Guía Paso a Paso
- Java 8 Streams: Enfoque Declarativo para Procesamiento de Datos