Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用for loop&;用唯一的随机数填充数组;如果声明?_C#_Arrays_For Loop_If Statement_Random - Fatal编程技术网

C# 如何使用for loop&;用唯一的随机数填充数组;如果声明?

C# 如何使用for loop&;用唯一的随机数填充数组;如果声明?,c#,arrays,for-loop,if-statement,random,C#,Arrays,For Loop,If Statement,Random,我试图用随机但唯一的数字填充一维数组(没有一个数字应该是相同的)。我想我在第二个for循环中有一个逻辑错误,但不能正确地得到它 另外,我并不是在寻找一个更“复杂”的解决方案——我现在所知道的是,如果。 P.P.S我知道这是一个真正的初学者问题,我为这种问题感到抱歉 int[] x = new int[10]; for (int i = 0; i < x.Length; i++) { x[i] = r.Next(9);

我试图用随机但唯一的数字填充一维数组(没有一个数字应该是相同的)。我想我在第二个for循环中有一个逻辑错误,但不能正确地得到它

另外,我并不是在寻找一个更“复杂”的解决方案——我现在所知道的是,如果。 P.P.S我知道这是一个真正的初学者问题,我为这种问题感到抱歉

        int[] x = new int[10];

        for (int i = 0; i < x.Length; i++)
        {
            x[i] = r.Next(9);

            for (int j = 0; j <i; j++)
            {
                if (x[i] == x[j]) break;

            }
        }
        for (int i = 0; i < x.Length; i++)
        {
            Console.WriteLine(x[i);
        }
int[]x=新的int[10];
对于(int i=0;i对于(intj=0;j,这里有一个代码解决方案

    int[] x = new int[10];

    for (int i = 0; i < x.Length;)
    {
        bool stop = false;
        x[i] = r.Next(9);

        for (int j = 0; j <i; j++)
        {
            if (x[i] == x[j]) {
                stop = true;
                break;
            }
        }
        if (!stop)
           i++;
    }
    for (int i = 0; i < x.Length; i++)
    {
        Console.WriteLine(x[i]);
    }
int[]x=新的int[10];
对于(int i=0;i对于(int j=0;j而言,典型的解决方案是按顺序生成整个电位集(在本例中是一个值为0到9的数组)。然后对序列进行洗牌

private static Random rng=new Random();
公共静态无效洗牌(int[]项)
{  
int n=列表长度;
而(n>1){
n--;
int k=下一个(n+1);
int temp=项目[k];
项目[k]=项目[n];
项目[n]=温度;
}  
}
静态void Main(字符串[]参数)
{
int[]x=新的int[10];

对于(int i=0;i您可以简单地执行以下操作:

private void AddUniqueNumber()
{  
   Random r = new Random();
   List<int> uniqueList = new List<int>();
   int num = 0, count = 10;
   for (int i = 0; i < count; i++)
   {
       num = r.Next(count);

       if (!uniqueList.Contains(num))
          uniqueList.Add(num);
   }
}

Or:

int[] x = new int[10];
Random r1 = new Random();
int num = 0;
for (int i = 0; i < x.Length; i++)
{
    num = r1.Next(10);
    x[num] = num;
}
private void AddUniqueNumber()
{  
随机r=新随机();
List uniqueList=新列表();
int num=0,count=10;
for(int i=0;i
对发布代码的简单跟踪可以揭示一些问题。具体来说,在线

if (x[i] == x[j]) break;
如果数组中的随机数“已经”存在,那么只要打破
j
循环,就会将当前
i
值跳过到
x
数组中。这意味着无论何时发现重复,x[i]都将是默认值的0(零),然后跳过

外部
i
循环显然在
x
int
数组中循环,这非常清楚,看起来还可以。但是,第二个内部循环不可能是
for
循环的
,这就是为什么…基本上你需要找到一个随机的
int
,然后循环现有的
int
,看看是否它已经存在。考虑到这一点,理论上你可以多次抓取同一个随机数,然后才能得到唯一的随机数。因此,在这种情况下……你真的不知道在找到唯一的随机数之前会循环多少次

话虽如此,它可能有助于“解决”您的问题。我猜与
x
数组中现有的
int
相比,有一种“方法”返回一个“唯一的”
int
,可能会派上用场。创建一个无休止的
循环,在这个循环中,我们将获取一个随机数,然后通过“existing”
ints
。如果随机数不是重复的,那么我们可以简单地返回此值。这就是此方法所做的一切,它可能如下所示

private static int GetNextInt(Random r, int[] x, int numberOfRandsFound) {
  int currentRand;
  bool itemAlreadyExist = false;
  while (true) {
    currentRand = r.Next(RandomNumberSize);
    itemAlreadyExist = false;
    for (int i = 0; i < numberOfRandsFound; i++) {
      if (x[i] == currentRand) {
        itemAlreadyExist = true;
        break;
      }
    }
    if (!itemAlreadyExist) {
      return currentRand;
    }
  }
}
最后,正如其他人所提到的,使用
列表

static int DataSize;
static int RandomNumberSize;

static void Main(string[] args) {
  Random random = new Random();
  DataSize = 10;
  RandomNumberSize = 10;
  List<int> listOfInts = new List<int>();
  bool stillWorking = true;
  int currentRand;
  while (stillWorking) {
    currentRand = random.Next(RandomNumberSize);
    if (!listOfInts.Contains(currentRand)) {
      listOfInts.Add(currentRand);
      if (listOfInts.Count == DataSize)
        stillWorking = false;
    }
  }
  for (int i = 0; i < listOfInts.Count; i++) {
    Console.WriteLine(i + " - " + listOfInts[i]);
  }
  Console.ReadKey();
}
static int-DataSize;
静态整数随机化;
静态void Main(字符串[]参数){
随机=新随机();
数据大小=10;
随机数化=10;
List LISTOFITS=新列表();
bool-stillWorking=true;
国际货币基金组织;
当(仍在工作){
currentRand=random.Next(随机数化);
如果(!listOfInts.Contains(currentRand)){
添加列表(currentRand);
if(listofits.Count==DataSize)
仍然工作=错误;
}
}
for(int i=0;i

希望这有帮助;-)

OP不需要更复杂的解决方案,这是给初学者的:-)它仍然不起作用。如果rng滚动重复的数字,答案中的第一个版本将无法填充整个数组,第二个选项不检查以确保项目是唯一的,也可能留下未分配的元素。只是好奇为什么必须在这里使用for循环和if语句?在解决方案中它们不是必需的。
r.Next(9)
只返回0-8范围内的数字(比参数小一个)。您需要将
Next
调用更改为
r.Next(10)
返回0-9之间的数字。老实说,我正在学习一本在线教材。因此我正在练习与这些特定操作员合作。希望我能有像你这样的导师!谢谢,这对我帮助很大。
static int DataSize;
static int RandomNumberSize;

static void Main(string[] args) {
  Random random = new Random();
  DataSize = 10;
  RandomNumberSize = 10;
  int numberOfRandsFound = 0;
  int[] ArrayOfInts = new int[DataSize];
  int currentRand;
  for (int i = 0; i < ArrayOfInts.Length; i++) {
    currentRand = GetNextInt(random, ArrayOfInts, numberOfRandsFound);
    ArrayOfInts[i] = currentRand;
    numberOfRandsFound++;
  }
  for (int i = 0; i < ArrayOfInts.Length; i++) {
    Console.WriteLine(ArrayOfInts[i]);
  }
  Console.ReadKey();
}          
static int DataSize;
static int RandomNumberSize;

static void Main(string[] args) {
  Random random = new Random();
  DataSize = 10;
  RandomNumberSize = 10;
  List<int> listOfInts = new List<int>();
  bool stillWorking = true;
  int currentRand;
  while (stillWorking) {
    currentRand = random.Next(RandomNumberSize);
    if (!listOfInts.Contains(currentRand)) {
      listOfInts.Add(currentRand);
      if (listOfInts.Count == DataSize)
        stillWorking = false;
    }
  }
  for (int i = 0; i < listOfInts.Count; i++) {
    Console.WriteLine(i + " - " + listOfInts[i]);
  }
  Console.ReadKey();
}