Случайное число Visual Basic с начальным числом, но наоборот

Я хочу сгенерировать случайное число от 1 до 26 с помощью начального числа, но затем хочу вернуть те же числа, когда я предоставлю функцию с тем же начальным числом.

Функции Rnd и Randomize для этого не подходят, поскольку они всегда возвращают совершенно случайное число, независимо от начального числа.


person Blease    schedule 16.05.2013    source источник
comment
Функции Rnd и Randomize для этого не подходят, поскольку они всегда возвращают совершенно случайное число, независимо от начального числа. Я вынужден не согласиться с вами в этом. Покажи нам свой код...   -  person Idle_Mind    schedule 16.05.2013
comment
@Idle_Mind, я уже выполнил то, что хотел, с ответом от Вирсавии, но спасибо за беспокойство.   -  person Blease    schedule 17.05.2013


Ответы (2)


Как ни странно, вам нужно сначала вызвать Rnd(-1), а затем Randomize(n) с n начальным числом.

Последующие вызовы Rnd() всегда будут давать вам одну и ту же последовательность.

e.g.

Sub test()

    Call Rnd(-1)
    Call Randomize(0)
    For n = 1 To 10
        Debug.Print Rnd
    Next n

End Sub
person Bathsheba    schedule 16.05.2013
comment
Стоит отметить, что эти функции являются старыми функциями VB6, которые до сих пор поддерживаются в первую очередь для обратной совместимости. Вместо этого новый код .NET должен использовать класс Random. +1, однако, за предоставление ответа с использованием старых функций по запросу :) - person Steven Doggart; 16.05.2013

Использование новых экземпляров класса System.Random является одним из возможных решений и инициализирует каждый экземпляр с одним и тем же семенем.

Sub Main()
    Dim yourSeed = 40 'Or whatever your seed it
    Dim random1 As New System.Random(yourSeed)
    Console.WriteLine(random1.Next(1, 26)) 'Prints 16
    Console.WriteLine(random1.Next(1, 26)) 'Prints 14
    Console.WriteLine(random1.Next(1, 26)) 'Prints 19

    Dim random2 As New System.Random(yourSeed)
    Console.WriteLine(random2.Next(1, 26)) 'Prints 16
    Console.WriteLine(random2.Next(1, 26)) 'Prints 14
    Console.WriteLine(random2.Next(1, 26)) 'Prints 19
End Sub
person vcsjones    schedule 16.05.2013