Поиск…


Вступление

Класс Random используется для создания неотрицательных псевдослучайных целых чисел, которые не являются по-настоящему случайными, но для общих целей достаточно близки.

Последовательность вычисляется с использованием начального числа (так называемого семени ). В более ранних версиях .net это начальное число было одинаковым при каждом запуске приложения. Итак, что произойдет, так это то, что вы будете получать одну и ту же последовательность псевдослучайных чисел каждый раз, когда приложение будет выполнено. Теперь семя основывается на времени объявления объекта.

замечания

Наконец, заметка о рандомизации. Как упоминалось ранее, когда вы объявляете экземпляр Random без каких-либо параметров, конструктор будет использовать текущее время в качестве части вычисления для создания начального начального числа. Обычно это нормально.

Тем не мение. Если вы повторно объявляете новые экземпляры за очень короткий промежуток времени, каждый раз, когда подсчитывается число семян, время может быть одинаковым. Рассмотрим этот код.

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

Поскольку в наши дни компьютеры очень быстрые, для выполнения этого кода потребуется немного секунды, а при нескольких повторных итерациях цикла системное время не изменится. Таким образом, количество семян не изменится, и случайное число будет одинаковым. Если вы хотите создать много случайных чисел, объявите экземпляр случайного вне цикла в этом простом примере.

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

Основное правило заключается в том, чтобы не создавать экземпляр генератора случайных чисел в течение коротких периодов времени.

Объявление экземпляра

Dim rng As New Random()

Это объявляет экземпляр класса Random, называемого rng . В этом случае для вычисления семени используется текущее время в точке, где создается объект. Это наиболее распространенное использование, но имеет свои проблемы, как мы увидим позже в замечаниях

Вместо того, чтобы позволить программе использовать текущее время как часть вычисления начального номера семени, вы можете указать начальное число семян. Это может быть любой 32-разрядный целочисленный литерал, константа или переменная. Ниже приведены примеры. Это означает, что ваш экземпляр будет генерировать одну и ту же последовательность псевдослучайных чисел, которая может быть полезна в определенных ситуациях.

Dim rng As New Random(43352)

или же

Dim rng As New Random(x)

где x был объявлен в другом месте вашей программы как константа или переменная Integer.

Создайте случайное число из экземпляра Random

В следующем примере объявляется новый экземпляр класса Random и затем используется метод .Next для генерации следующего числа в последовательности псевдослучайных чисел.

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

Последняя строка выше генерирует следующее псевдослучайное число и назначает его x . Это число будет находиться в диапазоне от 0 до 2147483647. Однако вы также можете указать диапазон чисел, которые должны быть сгенерированы, как в приведенном ниже примере.

x = rnd.Next(15, 200)

Обратите внимание, однако, что с использованием этих параметров диапазон чисел будет находиться между 15 или выше и 199 или ниже.

Вы также можете генерировать числа с плавающей запятой типа Double, используя .NextDouble eg

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

Однако вы не можете указать диапазон для этого. Он всегда будет в диапазоне от 0,0 до менее 1,0.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow