variable numeros number nextint metodo generar and aleatorios java random

numeros - random java 8



¿Por qué la clase aleatoria no es estática? (4)

Es necesario crear instancias, porque un generador de números aleatorios tiene un estado . Específicamente, el estado que controla la posición actual en la secuencia pseudoaleatoria.

Si desea varios generadores independientes (que no comparten el estado), entonces necesita instancias separadas.

En Java tenemos clase estática de matemáticas. No es necesario crear sus objetos por lo que es estático. Otra es la clase aleatoria. No necesitamos crear sus instancias, ¿por qué no es también estático? Mis clases a menudo uso números aleatorios y me enojo cuando tengo que crear rand de campo en cada clase para generar números aleatorios. Entonces, ¿por qué no es estático?


La clase aleatoria tiene un estado, incluyendo dónde está en su secuencia, ya que los valores producidos no son realmente aleatorios, solo una secuencia pseudoaleatoria.

Esto se puede demostrar inicializando dos instancias con la misma semilla.

Random a = new Random(123); Random b = new Random(123); for (int i = 0; i < 5; i++) { System.out.println(a.nextInt() + "," + b.nextInt()); }

Salida

-1188957731,-1188957731 1018954901,1018954901 -39088943,-39088943 1295249578,1295249578 1087885590,1087885590

Si creas con el constructor predeterminado Aleatorio (), la semilla se inicializa en función de la hora actual en nanosegundos + un contador estático, lo que significa que es muy probable que las diferentes instancias tengan diferentes secuencias.


La razón es que puede requerir varios generadores de números aleatorios independientes. Esto se logra al tener varias instancias de Random .


Se trata de semillas. Como saben, no hablamos de números aleatorios reales sino de pseudoaleatorios. Cuando conoces el primer número puedes calcular los otros. Por eso usamos algo que se llama ''una semilla''. Cada objeto de Random tiene una semilla diferente. Si Random fuera estático, no podrías tener dos semillas diferentes. Tenga en cuenta que el método setSeed() afectaría a todos los generadores de números aleatorios (y a menudo queremos cambiar solo uno).