0

I have the following code in C#, inside the Main method of a Simple Console Application.

I have debuged and, after List.Count = 6551 it seems the random values repeat themselves.

List<int> list = new List<int>(9999);
bool waiting = true;
Random random = new Random(DateTime.Today.Milliseconds);

do
{
    int units = random.Next(0, 9);
    int tens = random.Next(0, 9);
    int hundreds = random.Next(0, 9);
    int thousands = random.Next(0, 9);

   int result = int.Parse(String.Format("{0}{1}{2}{3}", units, tens, hundreds, thousands));

   if(list.Contains(result))
   {
       continue;
   }
   else
   {
       list.Add(result);
   }

   if(list.Count == 9999)
   {
       waiting = false;
   }

}while(waiting);

Console.WriteLine("Finished"):
Console.ReadKey();
daniel.jbatiz
  • 437
  • 4
  • 18

2 Answers2

4

Your digts range from 0 to (and excluding!) 9, which makes eight choices per digit (0-8) and thus 6561 combinations (9*9*9*9).

Also, beware that your algorithm is extremely inefficient. Eventually, your list will be very crowded and then, the algorithm will spend most of the time checking whether a given random number is already contained in your result list.

If your goal is to shuffle indices, you can reach that more eficiently by keeping a list of indices you haven't inserted already.

Georg
  • 5,626
  • 1
  • 23
  • 44
1

The answer has already be given by Georg, but concerning your efficiency problem: if what you want is a shuffled list of integer, you can do it with an extension method on the list.

var shuffled = Enumerable.Range(0, 10000).Shuffle();

Look here for more info An extension method on IEnumerable needed for shuffling

Bidou
  • 7,378
  • 9
  • 47
  • 70