Nimait70
Nimait70

Reputation: 25

generate random numbers with no repeat in c#

How can I generate random numbers with no repeat in C#. I have one array and I want to fill every room with random numbers from 0 to 9. Each room shoud have diffrent numbers. I use this:

for (int i = 0; i < 20; i++)
{
    Random rnd = new Random();
    int temp = 0;
    temp = rnd.Next(0, 9);
    page[i] = temp;
}

But I get same number in evey room's of array.

Upvotes: 0

Views: 27004

Answers (7)

Gary
Gary

Reputation: 1

This will create a unique range of 1 to rangeEx inclusive. The next two lines create a random number Generator and orders the IEnumerable range with a randome number. this is then called with ToArray and returned!

   private int[] RandomNumber(int rangeEx)
    {
        var orderedList = Enumerable.Range(1, range);
        var rng = new Random();
        return orderedList.OrderBy(c => rng.Next()).ToArray();
    }

Upvotes: 0

Abdulbasit Saidu
Abdulbasit Saidu

Reputation: 1

using System;

using System.Collections.Generic;

using System.Linq;


namespace nonRepeatableRndm
{

    class Program
    {
        //variable with the Values
        List<string> RandomVal = new List<string>();
        //variable to compare the randomly genarated Values
        List<string> CompaerbyString = new List<string>();
        //Variable that gets Value from  the list Values
        string DisplayVal;
        //instantiates the Random Class
        Random r;
        //this Method gives Value to the list and initializes th the Random Class
        void setVal()
        {
            //Adding to the list
            RandomVal.Add("A");
            RandomVal.Add("b");
            RandomVal.Add("c");
            RandomVal.Add("d");
            RandomVal.Add("e");
            RandomVal.Add("f");
            RandomVal.Add("g");
            RandomVal.Add("h");
            RandomVal.Add("i");
            RandomVal.Add("j");
            RandomVal.Add("k");
            RandomVal.Add("l");
            RandomVal.Add("m");
            RandomVal.Add("n");
            RandomVal.Add("o");
            RandomVal.Add("p");
            RandomVal.Add("q");
            RandomVal.Add("r");
            RandomVal.Add("s");
            RandomVal.Add("t");
            RandomVal.Add("u");
            RandomVal.Add("v");
            RandomVal.Add("w");
            RandomVal.Add("x");
            RandomVal.Add("y");
            RandomVal.Add("z");

            //Instantiating the Random Method
            r = new Random();
        }
        //This method Gives Out the Random Values
        public void DisplayRand()
        {

           //Setting Random Index 
           int getIndex =  r.Next(0, RandomVal.Count - 1);
            //Now we are trying to pass a random value to the String 
            DisplayVal = RandomVal.ElementAt<string>(getIndex);
            //we are testing to see if String in Display is contained in the List that will used Compare
            if (!CompaerbyString.Contains(DisplayVal))
                Console.WriteLine(DisplayVal.ToUpper());
            else
            {
                try
                {
                    this.DisplayRand();
                }
                catch(Exception e)
                {
                    Console.WriteLine("You have Reached the End of the list...");
                    Environment.Exit(0);
                }
            }
            //Adding Corrent DisplayVal's Value to the List for Comparison
            CompaerbyString.Add(DisplayVal);
        }
        //This is Simple method that Calls the Display
        void Call()
        {
            //This For loop is to Ensure we have no Stack Overflow
            for ( int i = 0; i < RandomVal.Count-1;i++)
            {
                this.DisplayRand();

            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Random Values With Out Repeatating Any Value");
            //Simple Instantiation
            Program dis = new Program();
            //Simple Call
            dis.setVal();
            //Simple Call
            dis.Call() ;
            Console.ReadLine();   
        }
    }
}

This is the output

Upvotes: -1

user3798696
user3798696

Reputation: 1

    public Form1()
    {
        InitializeComponent();
    }
    int A, B;
    string Output;
    private void Form1_Load(object sender, EventArgs e)
    {
        for (int i = 0; i < 20; i++)
        {
            while (A == B)
            {
                Random r = new Random();
                A = r.Next(1, 6);
            }
            Output = Output + A;
            B = A;
        }
        textBox1.Text = Output;
    }

Output: 24354132435213245415 (not repeating)

Upvotes: -1

meysam_rasouli
meysam_rasouli

Reputation: 1

        ArrayList page=new ArrayList();
        int random_index;            
        random rnd = new Random();

        for (int i = 0; i < 20; i++)
        {
            do                            
            {
                random_index = rnd.Next(10);
                if (!(page.Contains(random_index)))
                                break;
            } while (page.Contains(random_index));
            page.Add(random_index);
        }

Upvotes: -1

Daniel San
Daniel San

Reputation: 2026

Your problem is that you are creating the Random object in every loop. The Random object must be created only once. Try this instead:

Random rnd = new Random(); // <-- This line goes out of the loop        
for (int i = 0; i < 20; i++) {
    int temp = 0;
    temp = rnd.Next(0, 9);
    page[i] = temp;
}

Upvotes: 4

Anoush
Anoush

Reputation: 1

100 % right

   public int[] UniqeRandomArray(int size , int Min , int Max ) {

        int [] UniqueArray = new int[size];
        Random rnd = new Random();
        int Random;

        for (int i = 0 ; i < size ; i++) {

            Random = rnd.Next(Min, Max);

            for (int j = i; j >= 0 ; j--) {

                if (UniqueArray[j] == Random)
                { Random = rnd.Next(Min, Max); j = i; }

            }

            UniqueArray[i] = Random;

        }

        return UniqueArray;

    }

// Notice to be unique [Max - Min > size] NOT equal

Upvotes: -2

Joey
Joey

Reputation: 354366

With such a small list of numbers to choose from you can simply generate a list that contains all of them and then shuffle them.

Upvotes: 5

Related Questions