Генератор случайной строки, возвращая ту же строку [дубликат]

С для (var i в myArray) можно циклично выполниться по объектам также, я буду содержать ключевое имя, и можно получить доступ к свойству через myArray [я] . Additionaly, любые методы, которые Вы добавите к объекту, будет включен в цикл также т.е. если Вы будете использовать какую-либо внешнюю платформу как jQuery или прототип, или если Вы добавите методы для возражения прототипам непосредственно, однажды я укажу на те методы.

222
задан Cole Johnson 28 March 2014 в 05:16
поделиться

5 ответов

Вы создаете случайный экземпляр в методе, что заставляет его возвращать те же значения при быстром вызове. Я бы сделал что-то вроде этого:

private static Random random = new Random((int)DateTime.Now.Ticks);//thanks to McAden
private string RandomString(int size)
    {
        StringBuilder builder = new StringBuilder();
        char ch;
        for (int i = 0; i < size; i++)
        {
            ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));                 
            builder.Append(ch);
        }

        return builder.ToString();
    }

// get 1st random string 
string Rand1 = RandomString(4);

// get 2nd random string 
string Rand2 = RandomString(4);

// creat full rand string
string docNum = Rand1 + "-" + Rand2;

(измененная версия вашего кода)

305
ответ дан 23 November 2019 в 04:01
поделиться

Это потому, что каждый новый экземпляр Random генерирует одни и те же числа из-за того, что он вызывается так быстро. Не продолжайте создавать новый экземпляр, просто вызовите next () и объявите свой случайный класс вне вашего метода.

4
ответ дан 23 November 2019 в 04:01
поделиться

У вас должен быть один случайный объект уровня класса, инициируемый один раз в конструкторе и повторно используемый при каждом вызове (это продолжает ту же последовательность псевдослучайных чисел). Конструктор без параметров уже внутренне заполняет генератор Environment.TickCount.

3
ответ дан 23 November 2019 в 04:01
поделиться

Вы создаете экземпляр объекта Random внутри своего метода.

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

Чтобы решить эту проблему, переместите свой экземпляр Random за пределы самого метода (и пока вы в нем, вы можете избавиться от этой сумасшедшей последовательности вызовов Convert и Floor и NextDouble ):

private readonly Random _rng = new Random();
private const string _chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

private string RandomString(int size)
{
    char[] buffer = new char[size];

    for (int i = 0; i < size; i++)
    {
        buffer[i] = _chars[_rng.Next(_chars.Length)];
    }
    return new string(buffer);
}
186
ответ дан 23 November 2019 в 04:01
поделиться

Вот сообщение в блоге, в котором представлен немного более надежный класс для генерации случайных слов, предложений и абзацев.

1
ответ дан 23 November 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: