Saltar al contenido principal

Random

La clase Random se utiliza para generar números pseudoaleatorios. Los números pseudoaleatorios se generan a partir de un valor que se denomina semilla. Para Random se utiliza una semilla de 48 bits de longitud.

Existe una versión simplificada de Random en la clase Math, la cual devuelve un número pseudoaleatorio entre 0 y 1. El método al cual debemos llamar para obtener ese número es Math.random().

Importación

Para utilizar esta clase, necesitas importarla a tu clase de alguna de las siguientes formas:

import java.util.Random;
import java.util.*;

Constructores

Random posee dos constructores, pero el más utilizado es aquel sin parámetros:

Random rand1 = new Random(); // Crea un número número aleatorio.

Métodos

Algunos métodos de la clase Random son:

MétodoDescripción
boolean nextBoolean()Devuelve un valor booleano aleatorio: o true o false.
double nextDouble()Devuelve un valor real aleatorio entre 0.0 y 1.0.
float nextFloat()Devuelve un valor real aleatorio entre 0.0 y 1.0.
int nextInt()Devuelve un valor entero aleatorio entre 232 posibilidades.
int nextInt(int b)Devuelve un valor entero aleatorio entre 0 (inclusivo) y b (exclusivo).
long nextLong()Devuelve un valor entero aleatorio entre 264 posibilidades.

A continuación, se muestra cómo se utilizan los métodos de la clase. En los comentarios, se indica lo que devuelve y el tipo de dato devuelto. Nótese que se repiten los métodos dos veces para recalcar que los valores que devuelven son completamente diferentes en cada llamada.

// Creamos un objeto de tipo Random y lo utilizamos en las siguientes llamadas.
Random rand = new Random();

rand.nextBoolean(); // false (boolean)
rand.nextBoolean(); // true (boolean)
rand.nextDouble(); // 0.936825477462837 (double)
rand.nextDouble(); // 0.9052805719339739 (double)
rand.nextFloat(); // 0.21697468 (float)
rand.nextFloat(); // 0.6810994 (float)
rand.nextInt(); // 2080015933 (int)
rand.nextInt(); // -608272856 (int)
rand.nextInt(4); // 1 (int)
rand.nextInt(4); // 3 (int)
rand.nextLong(); // 8144434633878691418 (long)
rand.nextLong(); // 5187680820892793768 (long)

// Es posible crear el objeto y llamar a un método en una misma línea.
new Random().nextBoolean(); // true (boolean)
new Random().nextBoolean(); // false (boolean)
new Random().nextDouble(); // 0.013327589085581404 (double)
new Random().nextDouble(); // 0.013327589085581404 (double)
new Random().nextFloat(); // 0.6703412 (float)
new Random().nextFloat(); // 0.6939748 (float)
new Random().nextInt(); // 1569287005 (int)
new Random().nextInt(); // -522236227 (int)
new Random().nextInt(4); // 1 (int)
new Random().nextInt(4); // 2 (int)
new Random().nextLong(); // -6787292190728466496 (long)
new Random().nextLong(); // -7658671857705948461 (long)

Generar un número entero aletario en un rango

Para generar un número entero aleatorio entre a y b, debemos utilizar el método nextInt() con un parámetro. Es decir, de la siguiente forma:

int r = new Random().nextInt(5); // Genera un número aleatorio entre 0 y 4 (5 posibilidades).

El método nextInt(int b) genera un número aleatorio entre 0 (incluido) y el valor de b (excluido). Dicho de otra forma: genera un número aleatorio entre 0 y b-1 (ambos incluidos). Por ejemplo, si b es 3, el número que podríamos obtener sería entre 0 y 2 (ambos incluidos).

int b = 3;
int r = new Random().nextInt(b); // Puede devolver 0, 1 o 2 (3 posibilidades).

Si queremos que el rango no empiece en 0, debemos sumar o restar una cantidad al número aleatorio. Para obtener un número entre 0 y 5, hacemos lo siguiente:

int r = new Random().nextInt(6); // Puede devolver 0, 1, 2, 3, 4, 5 (6 posibilidades).

Si queremos que sea entre 1 y 6, debemos sumar 1 al total:

int r = new Random().nextInt(6); // Puede devolver 0, 1, 2, 3, 4, 5 (6 posibilidades).
r = r + 1; // Puede devolver 1, 2, 3, 4, 5, 6 (6 posibilidades).

O lo que es lo mismo:

int r = new Random().nextInt(6) + 1; // Puede devolver 1, 2, 3, 4, 5, 6 (6 posibilidades).

Por lo tanto, si queremos generalizar, debemos hacerlo de la siguiente manera:

// Generar un número entero aleatorio entre 1 y 4.
int a = 1;
int b = 4;
int r = new Random.nextInt(b) + a; // Puede devolver 1, 2, 3, 4 (4 posibilidades).
// Generar un número entero aleatorio entre -2 y 6.
int a = -2;
int b = 6;
int r = new Random.nextInt(b) + a; // Puede devolver -2, -1, 0, 1, 2, 3 (6 posibilidades).

Ejemplo completo:

import java.util.Random;

public class App {
public static void main(String[] args) {
Random random = new Random();
int min = 10; // Número mínimo
int max = 20; // Número máximo

// Generar un número aleatorio entre min (incluido) y max (incluido)
int numeroAleatorio = random.nextInt((max - min) + 1) + min;
}
}