Generar número aleatorio en Java Math.random()

Publicado el 25 febrero 2014 por Francves


Si queremos generar un número aleatorio en java lo que haremos será hacer uso del método Math.random(). Éste método devuelve un valor aleatorio de tipo double con signo positivo, mayor o igual a 0.0 e inferior a 1.0. Es útil si queremos que en nuestras aplicaciones suceda algo dependiendo al valor aleatorio generado. También es posible aumentar el rango del valor aleatorio, de manera que no sea solo mayor o igual a 0.0 e inferior a uno, sino que sea mayor o igual a 0 y menor a un número que queramos. ¿Como se haría? solo debemos multiplicar el método Math.random() por dicho número. 
Vamos generar 5 valores aleatorios en un rango mayor o igual que 0 y menor a 5 con un ciclo for y veamos los resultados:

public class NumeroAleatorio {
static double numero;
public static void main(String args[]){
for(int i = 0; i < 5; i++){
numero = Math.random() * 5;
System.out.print(numero);
System.out.println("");
}
}
}

También podemos generar valores enteros aleatorios, imaginemos que tenemos un dado, cuando lo lanzamos hay 6 posibilidades, puede ser 1,2...6. Simulemos un dado con el Math.random 

public class NumeroAleatorio {
static int numero;
public static void main(String args[]){
numero = (int) (Math.random() *6) + 1;
System.out.print(numero);
System.out.println("");
}
}

En éste caso la variable numero será del tipo entero, como el método Math.random retorna un valor del tipo double haremos uso del operador cast (int) . El operador cast lo que hace es forzar a un dato, variable o expresión a convertirse en un nuevo tipo de dato, en nuestro caso en un entero. Es importante saber que la operación (int) (Math.random() *6) retornara un valor entero mayor o igual que 0 y menor que 6. Pero nuestro dado necesita un valor entre 1 y 6 por esto sumamos 1 a nuestra operación (int) (Math.random() *6) + 1 . De ésta manera podremos simular un dado en java. 
¿Como sería si quiero que ocurra algo dependiendo del valor generado? Lo que haremos será hacer uso de los operadores relacionales. Generemos un valor aleatorio en que si éste es menor que 0.5 diga Hola mundo! y si es menor que 1 diga  Hello World!.

public class NumeroAleatorio {
static double numero;
public static void main(String args[]){
numero = Math.random();
if(numero < 0.5)
System.out.println("Hola mundo!");
else
System.out.println("Hello World!");
}
}

¿Y si queremos usar el Math.random junto a una sentencia switch se podría? ¡Seguro que si!

public class NumeroAleatorio {
static int numero;
public static void main(String args[]){
numero = (int) (Math.random() * 5) + 1;
switch(numero){
case 1:
System.out.println("Venezuela");
break;
case 2:
System.out.println("Argentina");
break;
case 3:
System.out.println("Colombia");
break;
case 4:
System.out.println("Ecuador");
break;
case 5:
System.out.println("Peru");
break;
}
}
}

Lo que hacemos es nuevamente utilizar el operador cast para convertir el valor generado en un entero, luego hacemos una sentencia switch con 5 posibilidades, en nuestro caso imprimimos en pantalla el nombre de un país dependiendo del número generado.