Buscar..


Introducción

La clase aleatoria se utiliza para generar enteros pseudo-aleatorios no negativos que no son realmente aleatorios, pero que son para propósitos generales lo suficientemente cercanos.

La secuencia se calcula utilizando un número inicial (llamado la semilla ) En versiones anteriores de .net, este número de semilla era el mismo cada vez que se ejecutaba una aplicación. Entonces, lo que sucedería sería que obtendría la misma secuencia de números pseudoaleatorios cada vez que se ejecutara la aplicación. Ahora, la semilla se basa en el momento en que se declara el objeto.

Observaciones

Finalmente, una nota sobre la aleatorización. Como se mencionó anteriormente, cuando declara una instancia de Random sin ningún parámetro, el constructor usará la hora actual como parte del cálculo para crear el número inicial inicial. Normalmente esto está bien.

Sin embargo. Si vuelve a declarar las nuevas instancias en un espacio de tiempo muy corto, cada vez que se calcula el número inicial, el tiempo podría ser el mismo. Considere este código.

For i As Integer = 1 To 100000
    Dim rnd As New Random
    x = rnd.Next
Next

Debido a que las computadoras son muy rápidas en estos días, este código tardará una fracción de segundo en ejecutarse y en varias iteraciones secuenciales del bucle, la hora del sistema no habrá cambiado. Por lo tanto, el número inicial no cambiará y el número aleatorio será el mismo. Si desea generar muchos números aleatorios, declare la instancia de aleatorio fuera del bucle en este simple ejemplo.

Dim rnd As New Random
For i As Integer = 1 To 100000
    x = rnd.Next
Next

La regla básica es no volver a crear una instancia del generador de números aleatorios en períodos cortos de tiempo.

Declarando una instancia

Dim rng As New Random()

Esto declara una instancia de la clase aleatoria llamada rng . En este caso, la hora actual en el punto donde se crea el objeto se utiliza para calcular la semilla. Este es el uso más común, pero tiene sus propios problemas, como veremos más adelante en las observaciones.

En lugar de permitir que el programa utilice la hora actual como parte del cálculo para el número inicial inicial, puede especificar el número inicial inicial. Esto puede ser cualquier entero de 32 bits literal, constante o variable. Vea a continuación los ejemplos. Hacer esto significa que su instancia generará la misma secuencia de números pseudoaleatorios, lo que puede ser útil en ciertas situaciones.

Dim rng As New Random(43352)

o

Dim rng As New Random(x)

donde x se ha declarado en otra parte de su programa como una constante o variable Integer.

Generar un número aleatorio a partir de una instancia de Random

El siguiente ejemplo declara una nueva instancia de la clase Random y luego usa el método .Next para generar el siguiente número en la secuencia de números pseudoaleatorios.

Dim rnd As New Random
Dim x As Integer
x = rnd.Next

La última línea de arriba generará el siguiente número pseudoaleatorio y lo asignará a x . Este número estará en el rango de 0 a 2147483647. Sin embargo, también puede especificar el rango de números que se generarán como se muestra en el siguiente ejemplo.

x = rnd.Next(15, 200)

Sin embargo, tenga en cuenta que al usar estos parámetros, el rango de números estará entre 15 o más y 199 o menos.

También puede generar números de punto flotante del tipo Double utilizando .NextDouble por ejemplo,

Dim rnd As New Random
Dim y As Double
y = rnd.NextDouble()

Sin embargo, no puede especificar un rango para esto. Siempre estará en el rango de 0.0 a menos de 1.0.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow