Generación de números aleatorios
Random y ThreadLocalRandom
Generación de números aleatorios es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.
Generar números aleatorios
La aleatoriedad es fundamental en juegos, simulaciones y muestreo. Java ofrece Math.random(), la clase Random y ThreadLocalRandom para código concurrente.
Conceptos básicos de Math.random
Math.random() devuelve un double en el rango [0.0, 1.0): el cero está incluido y el uno, excluido.
public class Main {
public static void main(String[] args) {
double r = Math.random();
System.out.println("Value between 0 and 1: " + r);
}
}Escalar Math.random
Multiplique y convierta el resultado para obtener un rango de enteros. (int)(Math.random() * 6) produce valores del 0 al 5.
public class Main {
public static void main(String[] args) {
int roll = (int)(Math.random() * 6) + 1;
System.out.println("Dice: " + roll);
}
}La clase Random
La clase java.util.Random es más flexible. Cree una instancia y, después, invoque métodos como nextInt, nextDouble y nextBoolean.
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rng = new Random();
System.out.println(rng.nextBoolean());
System.out.println(rng.nextDouble());
}
}nextInt con un límite
nextInt(bound) devuelve un int desde 0, incluido, hasta bound, excluido. nextInt(6) produce valores del 0 al 5.
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rng = new Random();
int value = rng.nextInt(100);
System.out.println("0 to 99: " + value);
}
}Usar una semilla para la reproducibilidad
Pasar una semilla al constructor hace que la secuencia sea determinista: la misma semilla siempre produce los mismos números. Esto es muy valioso para las pruebas.
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rng = new Random(42);
System.out.println(rng.nextInt(1000));
System.out.println(rng.nextInt(1000));
}
}La misma semilla, la misma secuencia
Dos objetos Random creados con la misma semilla generan secuencias idénticas. Esto resulta útil cuando es necesario reproducir exactamente un error.
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random a = new Random(7);
Random b = new Random(7);
System.out.println(a.nextInt(50) == b.nextInt(50));
}
}ThreadLocalRandom
En programas con varios hilos, un único Random compartido se convierte en un cuello de botella. ThreadLocalRandom.current() proporciona a cada hilo su propio generador sin contención.
import java.util.concurrent.ThreadLocalRandom;
public class Main {
public static void main(String[] args) {
int value = ThreadLocalRandom.current().nextInt(1, 7);
System.out.println("Dice: " + value);
}
}Nunca comparta un Random entre hilos
No pase una única instancia de Random a muchos hilos; puede producir una distribución deficiente y contención. Prefiera ThreadLocalRandom en código concurrente.
Doubles y distribuciones gaussianas
nextDouble() devuelve un valor en [0,1), y nextGaussian() devuelve valores de una distribución normal con media 0 y desviación estándar 1.
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rng = new Random(1);
System.out.println(rng.nextDouble());
System.out.println(rng.nextGaussian());
}
}Elegir la herramienta adecuada
Use Math.random() para obtener rápidamente un double, Random cuando necesite límites o una semilla, y ThreadLocalRandom en código concurrente. Para obtener aleatoriedad en contextos sensibles a la seguridad, use SecureRandom.
Comprobación rápida
Compruebe su comprensión de la aleatoriedad.
Repaso
Aprendió a generar números aleatorios.
Math.random()proporciona un double en [0,1).Random.nextInt(bound)proporciona valores del 0 a bound-1.- Una semilla hace que las secuencias sean reproducibles.
ThreadLocalRandomes la opción segura para código concurrente.
Preguntas frecuentes
¿La lección «Generación de números aleatorios» es gratis?
Sí — el texto completo de «Generación de números aleatorios» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Generación de números aleatorios»?
Random y ThreadLocalRandom Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Generación de números aleatorios»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- La clase Math
- Generación de números aleatorios
- Rangos aleatorios y mezclado
- Redondeo y límites matemáticos