Click here to Skip to main content
15,867,686 members
Articles / Programming Languages / C#
Tip/Trick

How to Generate Many Random Various Numbers?

Rate me:
Please Sign up or sign in to vote.
4.94/5 (26 votes)
28 Jan 2011CPOL 70.8K   18   20
How to generate many random various numbers?
  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#
    //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 inverse relationship between the performance and the value of the variable. The overload default is 2.

    Now, it's ready to use the method:

    C#
    //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 we need to have a different one:

    C#
    //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 required for using the method, to have a random variable and a list of numbers, for example:

    C#
    //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 different 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 better performance.

Good luck!

License

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


Written By
Software Developer (Senior)
Iran (Islamic Republic of) Iran (Islamic Republic of)
Microsoft Certified Technology Specialist (MCTS)


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


Nobody is perfect and neither am I, but I am trying to be more professional. In my humble opinion, you have to develop your skills, as long as you are responsible for developing even a tiny part of a sustainable software. That makes this job so special to me.

Comments and Discussions

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

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

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