Tirar un dado de seis lados
Para demostrar los números aleatorios, desarrollaremos un programa que simula 20 tiros de un dado de seis lados,
y que muestra el valor de cada tiro. Para empezar, usaremos
nextInt
para producir valores aleatorios en el rango
de 0 a 5, como se muestra a continuación:
cara = numerosAleatorios.nextInt(
6
);
El argumento 6 (que se conoce como el
factor de escala
) representa el número de valores únicos que
nextInt
debe producir (en este caso, seis: 0, 1, 2, 3, 4 y 5). A esta manipulación se le conoce como
escalar
el rango de
valores producidos por el método
nextInt
de
Random
.
Un dado de seis lados tiene los números del 1 al 6 en sus caras, no del 0 al 5. Por lo tanto,
desplazamos
el
rango de números producidos sumando un
valor de desplazamiento
(en este caso, 1) a nuestro resultado ante-
rior, como en
cara
=
1
+ numerosAleatorios.nextInt(
6
);
El valor de desplazamiento (
1
) especifi ca el primer valor en el conjunto deseado de enteros aleatorios. La instruc-
ción anterior asigna a
cara
un entero aleatorio en el rango de 1 a 6.
La
fi gura 6.7 muestra dos resultados de ejemplo, los cuales confi rman que los resultados del cálculo anterior
son enteros en el rango de 1 a 6, y que cada ejecución del programa puede producir una secuencia distinta de
números aleatorios. La línea 3 importa la clase
Random
del paquete
java.util
. La línea 9 crea el objeto
nume-
rosAleatorios
de la clase
Random
para producir valores aleatorios. La línea 16 se ejecuta 20 veces en un ciclo
para tirar el dado. La instrucción
if
(líneas 21 y 22) en el ciclo empieza una nueva línea de salida después de cada
cinco números.
1
// Fig. 6.7: EnterosAleatorios.java
2
// Enteros aleatorios desplazados y escalados.
3
import
java.util.Random;
// el programa usa la clase Random
4
5
public class
EnterosAleatorios
6
{
7
public static void
main( String args[] )
8
{
9
Random numerosAleatorios =
new
Random();
// generador de números aleatorios
10
int
cara;
// almacena cada entero aleatorio generado
11
12
// itera 20 veces
13
for
(
int
contador =
1
; contador <=
20
; contador++ )
14
{
15
// elige entero aleatorio del 1 al 6
16
cara =
1
+ numerosAleatorios.nextInt(
6
);
17
18
System.out.printf(
"%d "
, cara );
// muestra el valor generado
19
20
// si contador es divisible entre 5, empieza una nueva línea de salida
21
if
( contador %
5
==
0
)
22
System.out.println();
23
}
// fin de for
24
}
// fin de main
25
}
// fin de la clase EnterosAleatorios
Figura 6.7
| Enteros aleatorios desplazados y escalados. (Parte 1 de 2).
1 5 3 6 2
5 2 6 5 2
4 4 4 2 6
3 1 6 2 2
6.9 Ejemplo práctico: generación de números aleatorios
225
06_MAQ_CAP_06.indd225
4/19/081:22:16AM