Números aleatorios en java

Los números aleatorios se utilizan con frecuencia en programación para emular el comportamiento de algún fenómeno natural, el resultado de un juego de azar o, en general, para generar cualquier valor impredecible a priori.

Por ejemplo, se pueden utilizar números aleatorios para generar tiradas de dados de tal forma que, de antemano, no se puede saber el resultado. Antes de tirar un dado no sabemos si saldrá un 3 o un 5; se tratará pues de un número impredecible; lo que sí sabemos es que saldrá un número entre el 1 y el 6, es decir, podemos acotar el rango de los valores que vamos a obtener de forma aleatoria.

Para generar valores aleatorios utilizaremos Math.random(). Esta función genera un número con decimales (de tipo double) en el intervalo [0 - 1), es decir, genera un número mayor o igual que 0 y menor que 1.
El siguiente programa genera diez números aleatorios:



1
2
3
4
5
6
7
8
public class Aleatorio01 {
 public static void main(String[] args) {
  System.out.println("Diez números aleatorios:\n");
  for (int i = 1; i < 11; i++) {
   System.out.println(Math.random());
  }
 }
}
Pensarás que no es muy útil generar números aleatorios entre 0 y 1 si lo que queremos es por ejemplo sacar una carta al azar de la baraja española; pero en realidad un número decimal entre 0 y 1 es lo único que nos hace falta para generar cualquier tipo de valor aleatorio siempre y cuando se manipule ese número de la forma adecuada.

 Por ejemplo, si queremos generar valores aleatorios entre 0 y 10 (incluyendo el 0 y sin llegar a 10) simplemente tendremos que correr la coma un lugar o, lo que es lo mismo, multiplicar por 10.


1
2
3
4
5
6
7
8
9
public class Aleatorio02 {
 public static void main(String[] args) {
  System.out.println("20 números aleatorios entre 0 y 10");
  System.out.println(" sin llegar a 10 (con decimales):");
  for (int i = 1; i <= 20; i++) {
   System.out.println( Math.random()*10 + " ");
  } 
 }
}

Si queremos generar números enteros en lugar de números con decimales, basta con hacer un casting para convertir los números de tipo double en números de tipo int. Recuerda que (int)x transforma x en una variable de tipo entero; si x era de tipo float o double, perdería todos los decimales.
1
2
3
4
5
6
7
8
9
public class Aleatorio03 {
 public static void main(String[] args) {
  System.out.println("20 números aleatorios entre 0 y 9 (sin decimales):");
  for (int i = 1; i <= 20; i++) {
   System.out.print((int)(Math.random()*10) + " ");
  }
  System.out.println();
 }
}

¿Y si en lugar de generar números enteros entre 0 y 9 queremos generar números entre 1 y 10? Como habrás podido adivinar, simplemente habría que sumar 1 al número generado, de esta forma se “desplazan un paso” los valores generados al azar, de tal forma que el mínimo valor que se produce sería el 0 + 1 = 1 y el máximo sería 9 + 1 = 10.


1
2
3
4
5
6
7
8
9
public class Aleatorio04 {
 public static void main(String[] args) {
  System.out.println("20 números aleatorios entre 1 y 10 (sin decimales):");
  for (int i = 1; i <= 20; i++) {
   System.out.print( (int)(Math.random()*10 + 1) + " ");
  }
 System.out.println();
 }
}

Compartir

0 Comment to "Números aleatorios en java"

Publicar un comentario