Cómo generar números aleatorios en Java

Para generar números aleatorios en Java tenemos dos opciones. Por un lado podemos usar Math.random(), por otro la clase java.util.Random.

Un número aleatorio es un resultado de una combinación variable al azar especificada por una función de distribución. En los ordenadores personales es fácil simular la generación de números aleatorios, mediante mecanismos de generación de números seudoaleatorios, que, sin ser aleatorios (siguen una fórmula), lo aparentan.

Clase java.util.Random

La clase java.util.Random debemos instanciarla, a diferencia del método Math.random(). A cambio, tendremos bastantes más posibilidades. Podemos usar un constructor sin parámetros o bien pasarle una semilla. Si instanciamos varias veces la clase con la misma semilla, tendremos siempre la misma secuencia de números aleatorios.

Si queremos generar un número aleatorio simple en Java, es decir, entre 0 y un límite podemos utilizar esta implementación:

public static int generarAleatorio(int limite) {
    //Desde 0 hasta limite-1
    return new Random().nextInt(limite);
}

En el caso de que queramos establecer una semilla para generar siempre el mismo número podemos realizarlo con el siguiente método:

public static int generarAleatorioSemilla(int limite, long semilla) {
    //Desde 0 hasta limite-1 con semilla
    return new Random((long) semilla).nextInt(limite);
}

Cuando queremos generar una secuencia de varios números aleatorios, pero que siempre sea la misma frecuencia podemos usar el método anterior combinado con un bucle, como se muestra a continuación:

for (int i = 0; i < 10; i++) {
    System.out.print(generarAleatorioSemilla(90, i)+" ");
}

La secuencia que genera es la siguiente:

60 15 58 14 62 17 61 16 64 19

 

Math.Random() en Java

La llamada a Math.random() devuelve un número aleatorio entre 0.0 y 1.0, excluido este último valor, es decir, puede devolver 0.346442, 0.2344234, 0.98345,….

En muchas de nuestras aplicaciones no nos servirá este rango de valores. Por ejemplo, si queremos generar un número aleatorio que sea entero

En primer lugar, miramos cuantos valores queremos. Por ejemplo, para generar un número entre 1 y 10 debemos multiplicar Math.random() por 10 y sumarle 1.

(int) (Math.random()*10 + 1)   // Esto da valores entre 1 y 10 excluido el 10

Cuando queremos generar números aleatorios entre un determinado rango podemos usar el siguiente método:

public static int generarAleatorioRango(int inicio, int fin) {
    //Desde inicio hasta fin, ambos incluidos
    return (int) (Math.random() * ((fin + 1) - inicio)) + inicio; 
}

curso programación en java

Deja un comentario