попытка создать строку случайных значений - PullRequest
3 голосов
/ 25 августа 2010

Я пытаюсь сгенерировать строку произвольной длины, которая состоит из случайных char s.

Для этого у меня есть этот код:

class Program
{
    static void Main(string[] args)
    {
        for (int i = 0; i < 1000; i++)
        {
            MyString test = new MyString();

            test.Random();
            Console.WriteLine(test.Value);
        }
        Console.ReadLine();
    }
}

public class MyString
{
    private string value = string.Empty;
    private Random r = new Random();

    public string Value
    {
        get { return this.value; }
        set { this.value = value; }
    }

    public void Random()
    {
        int length = (r.Next() % (100)) + 1;
        for(int i = 0; i < length; i++)
        {
            value = value + RandomChar();
        }  
    }

    public char RandomChar()
    {
        // 32 to 126
        int c = (r.Next() % 95) + 32;
        char ch = (char)c;
        return ch;
    }
}

Теперь давайте посмотрим на часть вывода:

alt text

Как видите, выходные данные далеко не случайны, они содержат много повторяющихся строк. Как это возможно, и как мне это решить?

Ответы [ 2 ]

11 голосов
/ 25 августа 2010

Похоже, вы создаете новый экземпляр класса Random каждый раз, когда вызывается ваш конструктор MyString. Класс Random, вероятно, запускается на основе текущего времени (с некоторым разрешением). Генераторы случайных чисел с одинаковым значением будут генерировать одинаковую псевдослучайную последовательность.

Решение состоит в том, чтобы создать один экземпляр Random и использовать его везде.

0 голосов
/ 17 апреля 2012

http://msdn.microsoft.com/en-us/library/system.io.path.getrandomfilename.aspx

string randomName = Path.GetRandomFileName();
randomName = randomName.Replace(".", string.Empty);

// take substring...
...