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
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
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();
}
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;
}
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);
}
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)
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.