Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

attempting to create string of random values

Tags:

string

c#

random

I'm trying to generate a string of a random length which consists out of random chars.

To do so I have this code:

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;
    }
}

Now, lets look at a part of the output:

alt text

As you can see, the output is far from random, it contains a lot of repeating strings. How is this possible, and how do I solve it?

like image 868
user341877 Avatar asked Nov 20 '25 17:11

user341877


1 Answers

It looks like you are creating a new instance of the Random class every time your MyString constructor is called. The Random class probably seeds itself based on the current time (to some resolution). Random number generators seeded with the same value will generate the same pseudo-random sequence.

The solution is to construct one instance of Random and use that everywhere.

like image 77
Greg Hewgill Avatar answered Nov 23 '25 07:11

Greg Hewgill