Generación de números aleatorios en Java en un rango determinado: tutorial

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Números aleatorios en Java: del caos al orden

\n\n

¡Hola, futuro javista! Si alguna vez has escrito juegos, simulaciones, pruebas o simplemente has querido agregar un elemento de sorpresa a tu programa, seguramente te has enfrentado a la necesidad de obtener un número entero aleatorio en un rango determinado. Parecería que no podría ser más sencillo. Pero en la práctica, los principiantes a menudo se preguntan: «¿Por qué obtengo números del 0 al 100 y no del 50 al 100?» o «¿Por qué mi código da error?».

\n\n

Hoy analizaremos este tema de una vez por todas. Aprenderás cómo generar un número aleatorio en Java en cualquier rango, utilizando tres enfoques principales. Spoiler: uno de ellos es la mejor opción para el 90% de los casos. ¡Allá vamos!

\n\n

¿Por qué es importante?

\n

La generación de números aleatorios es una tarea básica pero críticamente importante. No se puede prescindir de ella al:

\n
    \n
  • Crear datos de prueba (por ejemplo, IDs de usuarios).
  • \n
  • Implementar mecánicas de juego (obtención de objetos, generación de niveles).
  • \n
  • Modelar procesos aleatorios (colas, tráfico).
  • \n
  • Seleccionar un elemento aleatorio de una lista.
  • \n
\n\n

Al dominar este tema, dejarás de temer la «magia» en el código y podrás manejar la aleatoriedad con confianza.

\n\n

Método n.º 1: El clásico — java.util.Random

\n

Este es el abuelo de todos los generadores en Java. La clase java.util.Random existe desde las primeras versiones y todavía se usa activamente. Su principal ventaja es la versatilidad.

\n\n

¿Cómo obtener un int aleatorio de 0 a N?

\n

El método nextInt(int bound) devuelve un número aleatorio desde 0 (incluido) hasta bound (excluido). Es decir, si escribes nextInt(10), obtendrás un número del 0 al 9.

\n\n
import java.util.Random;\n\npublic class RandomExample {\n    public static void main(String[] args) {\n        Random random = new Random();\n        int number = random.nextInt(10); // 0..9\n        System.out.println("Número aleatorio: " + number);\n    }\n}
\n\n

¿Y cómo hacerlo de 5 a 15?

\n

Aquí está el secreto principal. Para obtener un número en un rango arbitrario [min, max], debes usar la fórmula:

\n

min + random.nextInt(max - min + 1)

\n

Analicemos con un ejemplo: rango de 5 a 15.

\n
    \n
  • max - min + 1 = 15 - 5 + 1 = 11. Entonces nextInt(11) dará números del 0 al 10.
  • \n
  • Sumamos min (5): obtenemos el rango 5..15.
  • \n
\n

Verificamos: si nextInt(11) devolvió 0, entonces 0+5 = 5. Si devolvió 10, entonces 10+5 = 15. ¡Perfecto!

\n\n
Random random = new Random();\nint min = 5;\nint max = 15;\nint randomNumber = min + random.nextInt(max - min + 1);\nSystem.out.println("Número aleatorio de 5 a 15: " + randomNumber);
\n\n

Importante: ¡No olvides el +1! Sin él, el valor máximo será 1 menos.

\n\n

Método n.º 2: Enfoque moderno — ThreadLocalRandom

\n

A partir de Java 7, apareció la clase ThreadLocalRandom. Está especialmente diseñada para aplicaciones multiproceso (pero funciona muy bien también en aplicaciones de un solo hilo). La principal ventaja es que es más rápida que Random y no requiere crear un objeto separado.

\n\n

Uso en código de un solo hilo

\n

Tiene un método conveniente nextInt(int origin, int bound) que acepta directamente los límites del rango. Ten en cuenta: origin está incluido, bound está excluido. Si necesitas incluir también el límite superior, simplemente agrega +1.

\n\n
import java.util.concurrent.ThreadLocalRandom;\n\npublic class ThreadLocalRandomExample {\n    public static void main(String[] args) {\n        // Número de 5 a 15 (incluido)\n        int randomNumber = ThreadLocalRandom.current().nextInt(5, 16);\n        System.out.println("Número aleatorio: " + randomNumber);\n    }\n}
\n\n

¿Ves qué sencillo? Sin fórmulas,

Blogs

Book Recommendations