C# 生成一些唯一的数字并放入数组
我试图创建一个方法,产生10个唯一的随机数,但这些数字不是唯一的,我得到了几个重复!如何改进代码以使其按我所希望的方式工作C# 生成一些唯一的数字并放入数组,c#,C#,我试图创建一个方法,产生10个唯一的随机数,但这些数字不是唯一的,我得到了几个重复!如何改进代码以使其按我所希望的方式工作 int[] randomNumbers = new int[10]; Random random = new Random(); int index = 0; do { int randomNum = random.Next(0, 10);
int[] randomNumbers = new int[10];
Random random = new Random();
int index = 0;
do
{
int randomNum = random.Next(0, 10);
if (index == 0)
{
randomNumbers[0] = randomNum;
index++;
}
else
{
for (int i = 0; i < randomNumbers.Length; i++)
{
if (randomNumbers[i] == randomNum)
break;
else
{
randomNumbers[index] = randomNum;
index++;
break;
}
}
}
}
while (index <= 9);
foreach (int num in randomNumbers)
System.Console.Write(num + " ");
int[]随机数=新的int[10];
随机=新随机();
int指数=0;
做
{
int randomNum=random.Next(0,10);
如果(索引==0)
{
randomNumbers[0]=randomNum;
索引++;
}
其他的
{
for(int i=0;i
您需要的是一个数字列表,每个数字都是唯一的,介于0和9(或1和10)之间。解决此问题的可能方法如下:
//Create the list of numbers you want
var list = new List<int>();
for(var x = 0; x < 10; x++)
{
list.Add(x);
}
var random = new Random();
//Prepare randomized list
var randomizedList = new List<int>();
while(list.Length > 0)
{
//Pick random index in the range of the ordered list
var index = random.Next(0, list.Length);
//Put the number from the random index in the randomized list
randomizedList.Add(list[index]);
//Remove the number from the original list
list.RemoveAt(index);
}
//创建所需的号码列表
var list=新列表();
对于(变量x=0;x<10;x++)
{
增加(x);
}
var random=新的random();
//准备随机列表
var randomizedList=新列表();
while(list.Length>0)
{
//在有序列表的范围内选择随机索引
var index=random.Next(0,list.Length);
//将随机索引中的数字放入随机列表中
添加(列表[索引]);
//从原始列表中删除该号码
列表。删除(索引);
}
用文字解释,这就是你要做的:
创建包含最终列表应包含的所有数字的列表
创建第二个空列表
输入循环。循环将继续,只要有序列表中仍有数字
选择一个介于0和list.Length之间的随机索引
将此随机数放入随机列表中
从有序列表中删除索引位置处的项
这样,您就可以在随机列表中创建一组数字,然后始终从有序列表中选择一个随机条目。使用此技术,您还可以实现某些值在列表中多次出现
我不确定我的代码是否是针对c#编译的,因为我目前没有在这里运行visual studio,但我认为代码应该基本正确。random.next(0,10)返回一个介于0和10之间的随机数。它可能会在一行中多次返回同一个数字,并且不保证在调用10次时,每个介于0和10之间的数字都只得到一次
您需要的是一个数字列表,每个数字都是唯一的,介于0和9(或1和10)之间。解决此问题的可能方法如下:
//Create the list of numbers you want
var list = new List<int>();
for(var x = 0; x < 10; x++)
{
list.Add(x);
}
var random = new Random();
//Prepare randomized list
var randomizedList = new List<int>();
while(list.Length > 0)
{
//Pick random index in the range of the ordered list
var index = random.Next(0, list.Length);
//Put the number from the random index in the randomized list
randomizedList.Add(list[index]);
//Remove the number from the original list
list.RemoveAt(index);
}
//创建所需的号码列表
var list=新列表();
对于(变量x=0;x<10;x++)
{
增加(x);
}
var random=新的random();
//准备随机列表
var randomizedList=新列表();
while(list.Length>0)
{
//在有序列表的范围内选择随机索引
var index=random.Next(0,list.Length);
//将随机索引中的数字放入随机列表中
添加(列表[索引]);
//从原始列表中删除该号码
列表。删除(索引);
}
用文字解释,这就是你要做的:
创建包含最终列表应包含的所有数字的列表
创建第二个空列表
输入循环。循环将继续,只要有序列表中仍有数字
选择一个介于0和list.Length之间的随机索引
将此随机数放入随机列表中
从有序列表中删除索引位置处的项
这样,您就可以在随机列表中创建一组数字,然后始终从有序列表中选择一个随机条目。使用此技术,您还可以实现某些值在列表中多次出现
我不确定我的代码是否是针对c#编译的,因为我目前没有在这里运行visual studio,但我认为代码应该基本正确。实现这一点的最简单方法是拥有一个您想要的数字数组(即1-10)并使用随机洗牌算法
这是最简单的方法
编辑:
这里有一个C#实现的链接:实现这一点的最简单方法是拥有一个您想要的数字数组(即1-10)并使用随机洗牌算法
这是最简单的方法
编辑:
这里有一个C#实现的链接:类似的东西
const int maxNumbers = 10;
List<int> numbers = new List<int>(maxNumbers);
for (int i = 0; i < maxNumbers; i++)
{
numbers.Add(i);
}
Random r = new Random();
while (numbers.Count > 0)
{
int index = r.Next(numbers.Count);
Console.Write("{0} ", numbers[index]);
numbers.RemoveAt(index);
}
Console.WriteLine();
const int maxNumbers=10;
列表编号=新列表(最大编号);
对于(int i=0;i0)
{
int index=r.Next(number.Count);
写(“{0}”,数字[索引]);
数字。删除(索引);
}
Console.WriteLine();
编辑:对于任何随机数:
const int maxNumbers = 10;
const int biggestNumbers = 10000;
List<int> numbers = new List<int>(maxNumbers);
Random r = new Random();
while (numbers.Count < maxNumbers)
{
int index = r.Next(biggestNumbers);
if (numbers.IndexOf(index) < 0)
{
numbers.Add(index);
Console.Write("{0} ", index);
}
}
Console.WriteLine();
const int maxNumbers=10;
const int biggestNumbers=10000;
列表编号=新列表(最大编号);
随机r=新随机();
while(numbers.Count
像这样的东西
const int maxNumbers = 10;
List<int> numbers = new List<int>(maxNumbers);
for (int i = 0; i < maxNumbers; i++)
{
numbers.Add(i);
}
Random r = new Random();
while (numbers.Count > 0)
{
int index = r.Next(numbers.Count);
Console.Write("{0} ", numbers[index]);
numbers.RemoveAt(index);
}
Console.WriteLine();
const int maxNumbers=10;
列表编号=新列表(最大编号);
对于(int i=0;i0)
{
int index=r.Next(数字)。