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.
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;
}
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();
}
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)
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();
}
}
}
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.