# How to generate many random various numbers?

By , 28 Jan 2011

1. We need an array of random various numbers between x[0] and x[n] like shuffling the cards.

For example: 8, 10, 5, 4, 7, 6, 3, 1, 9, 2 (between 1 and 10)

The following code is a method (with an overload) and generates an array of random various integer numbers:

```//C#
public static int[] RandomNumbers(int min, int max)
{
return RandomNumbers(min, max, 2);
}
public static int[] RandomNumbers(int min, int max, int derangement)
{
if (min > max)
{
throw new Exception("The first parameter must be less (or equal) than the second.");
}
Random random = new Random();
int count = max - min; ;
int[] tempList = new int[count + 1];
int counter = 0;
for (int i = min; i <= max; i++)
{
tempList[counter] = i;
counter++;
}

for (int i = 0; i < derangement; i++)
for (int j = 0; j < count; j++)
{
int k = random.Next(0, count + 1);
int l = random.Next(0, count + 1);
if (k != l)
{
//Swap TempList[k] with TempList[l]
tempList[k] += tempList[l];
tempList[l] = tempList[k] - tempList[l];
tempList[k] = tempList[k] - tempList[l];
}
}
return tempList;
}```

Note: `derangement` is an integer variable to define the chance of the numbers derangement, but there is an inversely relationship between the performance and the value of the variable. The overload default is 2.

Now, It's ready to use the method:

```//C#
int[] m = RandomNumbers(1, 56, 5);
foreach (int i in m)
{
Console.Write("{0}, ",i);
}

2. We need to generate a random number which has not been generated since runtime.

There has been a generated random number previously, but need to have a different one:

```//C#
public static int RandomNumber(ref List<int> numbers, Random random)
{
int count = numbers.Count;
int randomIndex = random.Next(0, count);
int returnedNumber = numbers[randomIndex];
numbers.RemoveAt(randomIndex);
return returnedNumber;
}```

It's requisite for using the method, to have a random variable and a list of numbers, for example:

```//C#
Random random = new Random();
List<int> numbers = new List<int>();
for (int i = 0; i <= 1000; i++)
{
}

//Ok, For each using the method, there is a new and defferent random number:

Console.WriteLine(RandomNumber(ref numbers, random));
Console.WriteLine(RandomNumber(ref numbers, random));
Console.WriteLine(RandomNumber(ref numbers, random));
Console.WriteLine(RandomNumber(ref numbers, random));
Console.WriteLine(RandomNumber(ref numbers, random));

The second approach has a better performance.

Good Luck!

 Shahin Khorshidnia Software Developer (Senior) Iran (Islamic Republic Of) Member
Microsoft Certified Technology Specialist (MCTS)

"شاهین خورشیدنیا"

Votes of 3 or less require a comment

 Search this forum Profile popups    Spacing RelaxedCompactTight   Noise Very HighHighMediumLowVery Low   Layout Open AllThread ViewNo JavascriptPreview   Per page 102550
 First Prev Next
 Re: Because it gives you a uniform distribution (which your meth... Henry.Ayoola 2 Sep '11 - 4:31
 Reason for my vote of 5 Good tip. ProEnggSoft 24 Feb '12 - 21:03
 Re: Thank you very much. Shahin Khorshidnia 25 Feb '12 - 3:39
 Reason for my vote of 5 A genuine tip...Good work bro.. Pravin Patil, Mumbai 13 Sep '11 - 0:29
 Re: Thank you. Shahin Khorshidnia 14 Sep '11 - 21:35
 Reason for my vote of 1 A better way of doing this has been ... Henry.Ayoola 31 Aug '11 - 21:46
 Reason for my vote of 1 A better way of doing this has been known for a very long time: http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle Sign In·View Thread·Permalink
 Nice article... Pradip_Bobhate 31 Aug '11 - 4:52
 Reason for my vote of 5 Usefull... Some people couldn't prob... Toli Cuturicu 13 Feb '11 - 11:44
 Re: Thank you Toli Shahin Khorshidnia 14 Feb '11 - 0:15
 Good!!! shakil0304003 31 Jan '11 - 22:10
 Re: Thank you shakil Shahin Khorshidnia 1 Feb '11 - 23:30
 Reason for my vote of 5 Good trick. thank you Arahs 28 Jan '11 - 2:40
 Re: Thank you my friend. Shahin Khorshidnia 28 Jan '11 - 21:48
 Thank you for Voting, Russel In any case, we have performanc... Shahin Khorshidnia 27 Jan '11 - 12:51
 Reason for my vote of 5 Good But try RandomNumbers(1,100000... RusselSSC 27 Jan '11 - 12:32
 Thank you for Voting, Russel   In any case, we have performance problem when we're using big values in every codes. Sign In·View Thread·Permalink
 Reason for my vote of 5 nice - have 5 Pranay Rana 26 Jan '11 - 20:48