C# 生成一些唯一的数字并放入数组

C# 生成一些唯一的数字并放入数组,c#,C#,我试图创建一个方法,产生10个唯一的随机数,但这些数字不是唯一的,我得到了几个重复!如何改进代码以使其按我所希望的方式工作 int[] randomNumbers = new int[10]; Random random = new Random(); int index = 0; do { int randomNum = random.Next(0, 10);

我试图创建一个方法,产生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(数字)。