Вы находитесь на странице: 1из 3

01/08/13

Generar nmeros aleatorios en Java - ChuWiki

Generar nmeros aleatorios en Java


Tw ittear 0

De ChuWiki
Para generar nmeros aleatorios en Java tenemos dos opciones. Por un lado podemos usar Math.random(), por otro la clase java.util.Random. La primera es de uso ms sencillo y rpido. La segunda nos da ms opciones.

Math.random()
La llamada a Math.random() devuelve un nmero 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 simular una tirada de dado, queremos nmeros entre 1 y 6 sin decimales. Debemos echar unas cuentas para obtener lo deseado. En primer lugar, miramos cuntos valores queremos. En nuestro caso del dado son 6 valores, del 1 al 6 ambos incluido. Debemos entonces multiplicar Math.random() por 6 (que es (maximo-minimimo)+1, es decir, (6-1)+1)
M a t h . r a n d o m ( ) * 6 / /E s t od av a l o r e sd e0 . 0a6 . 0 ,e x c l u i d oe l6 . 0

Como nuestro primer valor es 1, le sumamos 1 al resultado


M a t h . r a n d o m ( ) * 6+1 / /E s t od av a l o r e se n t r e1 . 0y7 . 0e x c l u i d oe l7 . 0

Finalmente, para conseguir un entero, quitamos los decimales usando la clase Math.floor()
i n tv a l o r D a d o=M a t h . f l o o r ( M a t h . r a n d o m ( ) * 6 + 1 ) ;

En general, para conseguir un nmero entero entre M y N con M menor que N, debemos usar esta frmula
chuwiki.chuidiang.org/index.php?title=Generar_nmeros_aleatorios_en_Java 1/3

01/08/13

Generar nmeros aleatorios en Java - ChuWiki

i n tv a l o r E n t e r o=M a t h . f l o o r ( M a t h . r a n d o m ( ) * ( N M + 1 ) + M ) ; / /V a l o re n t r eMyN ,a m b o si n c l u i d o s .

Si no queremos un valor entero sino double, la frmula es sin el +1


d o u b l ev a l o r A l e a t o r i o=M a t h . r a n d o m ( ) * ( N M ) + M ;

eso s, recuerda que el valor N queda excluido y no saldr nunca.

Clase java.util.Random
La clase java.util.Random debemos instanciarla, a diferencia del mtodo Math.random(). A cambio, tendremos bastantes ms posibilidades. Podemos usar un constructor sin parmetros o bien pasarle una semilla. Si instanciamos varias veces la clase con la misma semilla, tendremos siempre la misma secuencia de nmeros aleatorios.
R a n d o mr 1=n e wR a n d o m ( ) ; R a n d o mr 2=n e wR a n d o m ( 4 2 3 4 ) ; R a n d o mr 3=n e wR a n d o m ( 4 2 3 4 ) ;/ /r 2yr 3d a r nl am i s m as e c u e n c i a .

Lo ms fcil es usar el constructor sin parmetros, que normalmente dar secuencias distintas en cada instancia. De todas formas, una manera de obtener una semilla que sea distinta cada vez que ejecutemos nuestro programa puede ser obtener el tiempo actual en milisegundos con System.currentTimeMillis(), que dar nmeros distintos salvo que hagamos la instacia justo en el mismo instante de tiempo. Con esta clase, una vez instanciada, nuestro problema del dado sera bastante ms sencillo, usando el mtodo nextInt(int n), que devuelve un valor entre 0 y n, excluido n
R a n d o mr=n e wR a n d o m ( ) ; i n tv a l o r D a d o=r . n e x t I n t ( 6 ) + 1 ; / /E n t r e0y5 ,m s1 .

Tambin tenemos funciones que nos dan un valor aleatorio siguiendo una curva de Gauss o que nos rellenan un array de bytes de forma aleatoria. Y por supuesto, el nextDouble() que devuelve un valor aleatorio entre 0.0 y 1.0, excluido este ltimo. Obtenido de "http://chuwiki.chuidiang.org/index.php?title=Generar_n%C3%BAmeros_aleatorios_en_Java" Categora: Java:Bsico

Curso Online de Java


Capacityacademy.com/Curso-de-Java Aprende a programar en Java J2EE. 2 pagos de US$ 99 Inscrbete Ahora!

Esta pgina fue modificada por ltima vez el 04:34, 18 feb 2010.

chuwiki.chuidiang.org/index.php?title=Generar_nmeros_aleatorios_en_Java

2/3

01/08/13

Generar nmeros aleatorios en Java - ChuWiki

Esta obra est bajo una licencia de Creative Commons. Para reconocer la autora debes poner http://www.chuidiang.com/chuwiki

chuwiki.chuidiang.org/index.php?title=Generar_nmeros_aleatorios_en_Java

3/3