números generados al azar tiene muchos usos en los programas de ordenador , como crear incertidumbre en los juegos , las simulaciones de modelos y se realiza la encriptación . Java proporciona dos técnicas para la generación de números aleatorios . La biblioteca de matemáticas ofrece un método simple , pero conveniente , al azar para la generación de un valor de punto flotante aleatorio entre 0 y 1,0 . La clase Random proporciona capacidades de generación de números aleatorios más flexibles.
azar números generadores se utilizan en la programación de juegos de azar .
Basics
Un generador de números aleatorios es una rutina diseñada para producir un valor numérico que parece tocado en suerte . En Java , como con todos los lenguajes de programación , los valores generados por Math.random ( ) y la clase Random aparecen al azar , pero en realidad no lo son. Por lo tanto , se dice que estos métodos para producir números pseudo -aleatorios
Propiedades
generadores de números pseudo -aleatorios tienen dos propiedades básicas: . . Distribución y semillas
la "distribución" se refiere a la frecuencia con que aparece cada valor en una serie de números generados . La mayoría de los métodos aleatorios de Java producir una distribución uniforme de los números, es decir, no un valor aparecerá con más frecuencia que cualquier otro . La clase tiene un método aleatorio , nextGaussian , que genera números que siguen una distribución Gaussiana (también " normal" o " curva de la campana " ) .
La "semilla " es un número que se usa para inicializar un número pseudo-aleatorio generador . Dada la misma semilla , un generador de números pseudo-aleatorios producirá una serie idéntica de números de llamada cuando el uso de los mismos métodos y parámetros . La capacidad para reproducir un conjunto de números es útil en la depuración , pruebas y otros escenarios donde recrear entorno de ejecución de una aplicación que se necesita .
Math.random ()
método Math.random ( ) es un generador de números pseudo - aleatoria simple . Se utiliza simplemente llamando Math.random ( ) . El método devuelve un doble entre 0.0 (incluida) y 1.0 (exclusivo) . Los valores producidos seguir una distribución uniforme . Si se necesita un rango diferente , el tipo o la distribución , el programador debe convertir los resultados al tipo deseado y realizar cálculos adicionales para generar el resultado deseado.
La clase Random
< p> La clase Random es más flexible que Math.random (), pero requiere un poco más de esfuerzo para su uso. Se construye una instancia de la clase Random . El constructor tendrá un entero largo que el valor de la semilla , o si no se proporciona un valor inicial , se utilizará la hora actual en milisegundos como la semilla por defecto . La clase Random proporciona un método de fijación de la semilla después de la construcción . Existen varios métodos de generación de números pseudo - aleatorios en esta clase , cada uno precedido por la palabra "next ". La mayoría de estos métodos devuelven valores distribuidos de manera uniforme a través de diversos rangos y de diversos tipos , tales como enteros , valores de punto flotante y valores booleanos. El método devuelve nextGaussian dobles distribuidas gaussianas . El método nextInt puede tomar un parámetro entero que define el extremo superior de la gama.
Consideraciones
Generación de un conjunto de números que no se pueden predecir a veces es conveniente , por ejemplo, para evitar que los jugadores sean capaces de hacer trampa en los juegos. Los valores pseudo-aleatorios devueltos por varias instancias de la clase al azar se pueden combinar para proporcionar aleatoriedad adicional en el conjunto resultante . La implementación de una distribución no uniforme también puede ser útil .
De Java genera números pseudo-aleatorios que siguen ya sea un uniforme o distribución gaussiana . Distribuciones no uniformes son útiles , en particular en simulaciones para simular escenarios que se ajustan a distribuciones específicas en la realidad . Otras distribuciones se puede lograr utilizando la función de distribución acumulativa inversa de la distribución deseada . Esta función tiene una probabilidad ( un valor entre 0,0 y 1,0 exclusivo) como parámetro. Los resultados distintos de cero de cualquiera Math.random ( ) o uno de los métodos de la clase azar que devuelve un valor de coma flotante se pueden utilizar para este parámetro . Vea la sección de Recursos para un enlace a la Biblioteca de Matemáticas Apache , que proporciona métodos inversos para varias distribuciones acumulativas .