Sunteți pe pagina 1din 2

GENERAR NMEROS ALEATORIOS EN JAVA

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) Math.random()*6 // Esto da valores de 0.0 a 6.0, excluido el 6.0 Como nuestro primer valor es 1, le sumamos 1 al resultado Math.random()*6 + 1 // Esto da valores entre 1.0 y 7.0 excluido el 7.0 Finalmente, para conseguir un entero, quitamos los decimales usando la clase Math.floor() int valorDado = Math.floor(Math.random()*6+1); En general, para conseguir un nmero entero entre M y N con M menor que N, debemos usar esta frmula int valorEntero = Math.floor(Math.random()*(N-M+1)+M); // Valor entre M y N, ambos incluidos. Si no queremos un valor entero sino double, la frmula es sin el +1 double valorAleatorio = Math.random()*(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.

Random r1 = new Random(); Random r2 = new Random(4234); Random r3 = new Random(4234); // r2 y r3 darn la misma secuencia. 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 Random r = new Random(); int valorDado = r.nextInt(6)+1; // Entre 0 y 5, ms 1. 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.

JAVA NUMERO ALEATORIO EN JAVA


Mltiples circunstancias harn que necesitemos generar un nmero aleatorio. La ms habitual ser la de generacin de claves. Si nos encontramos dentro de un entorno Java podemos apoyarnos en la clase Math para dicha generacin. Y es que los pasos sern muy sencillos. La clase Math tiene un mtodo .random(), el cual genera un nmero aleatorio entre 0.0 y 1.0. El valor devuelto ser de tipo double. Math.random(); Si queremos hacer que el nmero sea un nmero natural entre un determinado rango, deberemos de seguir la siguiente formula: Math.random()*limite+1; Donde lmite ser el nmero ms alto del rango. Los nmero genrico que generaremos irn entre el 1 y el lmite. As, por ejemplo, si queremos generar nmero entre el 1 y el 25 tendremos que utilizar la siguiente lnea de cdigo: Math.random()*25+1; Hay que recordar que el nmero generado es del tipo double. Es por ello que para finalizar deberemos de hacer un casting a un entero. int numeroAleatorio = (int) (Math.random()*25+1);

S-ar putea să vă placă și