Generando números aleatorios en Java

Generar una serie de números aleatorios es una de esas tareas comunes que surgen de vez en cuando. En Java, se puede lograr simplemente usando la clase java.util.Random.

El primer paso, como con el uso de cualquier clase de la API, es poner la declaración de importación antes del inicio de la clase de programa:

A continuación, cree un objeto aleatorio:

El objeto aleatorio le proporciona un simple generador de números aleatorios. Los métodos del objeto dan la posibilidad de elegir números aleatorios. Por ejemplo, los métodos nextInt() y nextLong() devolverán un número que se encuentre dentro del rango de valores (negativos y positivos) de los tipos de datos int y long respectivamente:

Los números devueltos serán elegidos al azar en valores int y long:

Escoger números aleatorios de un cierto rango

Normalmente los números aleatorios que se generen deben ser de un cierto rango (por ejemplo, entre 1 y 40 inclusive). Para ello, el método nextInt() también puede aceptar un parámetro int. Denota el límite superior del rango de números. Sin embargo, el número del límite superior no se incluye como uno de los números que pueden ser elegidos. Esto puede sonar confuso pero el método nextInt() funciona de cero hacia arriba. Por ejemplo:

sólo escogerá un número aleatorio de 0 a 39 inclusive. Para elegir de un rango que comienza con 1, simplemente añade 1 al resultado del siguiente métodoInt(). Por ejemplo, para elegir un número entre 1 y 40 inclusivamente añade uno al resultado:

Si el rango comienza con un número más alto que uno, lo necesitarás:

  • menos el número inicial del número del límite superior y luego sumar uno.
  • añade el número inicial al resultado del método nextInt().

Por ejemplo, para elegir un número de 5 a 35 inclusive, el número límite superior será 35-5+1=31 y 5 debe ser añadido al resultado:

¿Cómo de aleatoria es la clase aleatoria?

Debo señalar que la clase Aleatoria genera números aleatorios de manera determinante. El algoritmo que produce la aleatoriedad se basa en un número llamado semilla. Si se conoce el número de la semilla, entonces es posible calcular los números que se van a producir a partir del algoritmo. Para probar esto usaré los números de la fecha en que Neil Armstrong pisó la Luna por primera vez como mi número de semilla (20 de julio de 1969).

No importa quién ejecute este código, la secuencia de números «aleatorios» producidos será:

Por defecto, el número de semilla que se utiliza por:

es la hora actual en milisegundos desde el 1 de enero de 1970. Normalmente esto producirá números suficientemente aleatorios para la mayoría de los propósitos. Sin embargo, tenga en cuenta que dos generadores de números aleatorios creados en el mismo milisegundo generarán los mismos números aleatorios.

También tenga cuidado al usar la clase Random para cualquier aplicación que deba tener un generador de números aleatorios seguro (por ejemplo, un programa de apuestas). Podría ser posible adivinar el número de la semilla en base al tiempo que la aplicación se está ejecutando. Por lo general, para las aplicaciones en las que los números aleatorios son absolutamente críticos, es mejor encontrar una alternativa al objeto Random. Para la mayoría de las aplicaciones donde sólo se necesita un cierto elemento aleatorio (por ejemplo, los dados para un juego de mesa) entonces funciona bien.

Leave a Reply