tags:

views:

322

answers:

2

Hi There,

I am trying to generate a different random number every time my RandomNumber method is called from within my for loop. Right now, it returns the same number every time.

This is my RandomNumber method:

    private int RandomNumber(int min, int max)
    {
        Random random = new Random();
        return random.Next(min, max);
    }

This is the context I am using it in: (it's a little messy just because I have been messing with trying to get it to work....)

        for (int i = 0; i < charsRaw.Length; i++)
        {
            int max = charsRaw.Length - 1;
            int rand = 0;
            rand = RandomNumber(0, max);

            charsNew[i] = charsRaw[rand];
            text2 += charsNew[i];

         }

I can't seem to get it to return a different value every time it is called with the for loop.

Although, when i stick a MessageBox.Show(rand.ToString()) after text2 += charsNew[i], it gives me a different value every time and works the way I intended it to. Strange.

Thanks! Eric

+11  A: 

Instantiate Random once. Call .Next() multiple times on the same instance.

MSDN:

The random number generation starts from a seed value. If the same seed is used repeatedly, the same series of numbers is generated

If you do wish to repeatedly instantiate Random, use a different seed each time.

anthony
Thanks! This worked!
Eric
The last paragraph is a little misleading. new Random() does exactly that, that is, seeding the generator with the current time. Since you do this within a tight loop you're getting many identical instances which, of course, yield identical sequences. Manually seeding with the current time does not serve to make things better here. Also, you'll get pretty much linear dependency in the seeds which is a bad thing for randomness in most generators (cf. http://portal.acm.org/citation.cfm?doid=1276927.1276928)
Joey
good call. i'll edit.
anthony
+1  A: 

There's nothing saying a truly random sequence can't be the same number each time! :-) There is a small probability it's legit so you can never truly be sure. ducks for cover

veroxii
http://web.archive.org/web/20011027002011/http://dilbert.com/comics/dilbert/archive/images/dilbert2001182781025.gif
Jeffrey Kemp