Click here to Skip to main content
Click here to Skip to main content

How to generate many random various numbers?

By , 28 Jan 2011
Rate this:
Please Sign up or sign in to vote.
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);      
}
Console.ReadKey();
 
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++)
{
    numbers.Add(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));
Console.ReadKey();
 
The second approach has a better performance.
 
Good Luck!

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

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

"شاهین خورشیدنیا"
Follow on   LinkedIn

Comments and Discussions

 
GeneralRe: Because it gives you a uniform distribution (which your meth... PinmemberHenry.Ayoola2-Sep-11 4:31 
GeneralReason for my vote of 5 Good tip. PinmemberProEnggSoft24-Feb-12 21:03 
GeneralRe: Thank you very much. PinmemberShahin Khorshidnia25-Feb-12 3:39 
GeneralReason for my vote of 5 A genuine tip...Good work bro.. PinmemberPravin Patil, Mumbai13-Sep-11 0:29 
GeneralRe: Thank you. PinmemberShahin Khorshidnia14-Sep-11 21:35 
GeneralReason for my vote of 1 A better way of doing this has been ... PinmemberHenry.Ayoola31-Aug-11 21:46 
GeneralRe: Thank you. And would you explain why that way is better? PinmemberShahin Khorshidnia1-Sep-11 10:34 
GeneralNice article... PinmemberPradip_Bobhate31-Aug-11 4:52 
GeneralReason for my vote of 5 Usefull... Some people couldn't prob... PinmemberToli Cuturicu13-Feb-11 11:44 
GeneralRe: Thank you Toli PinmemberShahin Khorshidnia14-Feb-11 0:15 
GeneralGood!!! Pinmembershakil030400331-Jan-11 22:10 
GeneralRe: Thank you shakil PinmemberShahin Khorshidnia1-Feb-11 23:30 
GeneralReason for my vote of 5 Good trick. thank you PinmemberArahs28-Jan-11 2:40 
GeneralRe: Thank you my friend. PinmemberShahin Khorshidnia28-Jan-11 21:48 
GeneralThank you for Voting, Russel In any case, we have performanc... PinmemberShahin Khorshidnia27-Jan-11 12:51 
GeneralReason for my vote of 5 Good But try RandomNumbers(1,100000... PinmemberRusselSSC27-Jan-11 12:32 
GeneralRe: Thank you for Voting, Russel In any case, we have performan... PinmemberShahin Khorshidnia27-Jan-11 12:52 
GeneralReason for my vote of 5 nice - have 5 PinmemberPranay Rana26-Jan-11 20:48 
GeneralRe: Thank you Panay Rana PinmemberShahin Khorshidnia26-Jan-11 20:55 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web02 | 2.8.140415.2 | Last Updated 28 Jan 2011
Article Copyright 2011 by Shahin Khorshidnia
Everything else Copyright © CodeProject, 1999-2014
Terms of Use
Layout: fixed | fluid