【问题标题】:Create 10 Unique numbers and save to array创建 10 个唯一数字并保存到数组
【发布时间】:2013-04-02 06:53:49
【问题描述】:

我正在尝试生成 10 个唯一的随机数并将其保存到一个数组中。
这是我的代码,但有运行时错误,但我不知道如何。

有人可以帮帮我吗?

static void Main(string[] args)
    {
        int [] generatedNum = new int[10];
        bool duplicated;
        int tempo;
        Random random = new Random();

        // Create first number
        generatedNum[0] = random.Next(1, 25);      

        for (int i = 1; i < 10; i++)
        {
            tempo = random.Next(0, 25);
            do
            {
                duplicated = false;
                foreach (int x in generatedNum)
                {
                    if (x == tempo)
                        duplicated = true;
                }

                if (duplicated == true)
                tempo = random.Next(0, 25);
            } while (duplicated == true);

            // Save unique number to array
            generatedNum[i] = tempo;

        }

        // To check the number saved
        foreach (int i in generatedNum)
        {
            Console.WriteLine("{0}", generatedNum[i]);
        }

    }

【问题讨论】:

  • 什么是运行时错误?

标签: c# arrays random


【解决方案1】:

这可能会有所帮助:

public List<int> GetNumber()
{
    Random random = new Random();
    List<int> values = new List<int>();
    values.Add(random.Next(0, 25));

    while (values.Count < 10)
    {
        int newValue;

        do
        {
            newValue = random.Next(0, 25);
        } while (values.Contains(newValue));

        values.Add(newValue);
    }
    return values;
}

【讨论】:

    【解决方案2】:

    要从 y 数组中获得 x 个唯一项,您需要一个 shuffle bag

    您将数字 1-25 放入一个袋子中,将其洗牌,然后取出前 10 个项目。您现在将有 10 个介于 1 和 25 之间的随机项目。

    【讨论】:

      【解决方案3】:

      您的最后一个 foreach 循环无效。 i是值,不是索引,直接写即可:

      // To check the number saved
      foreach (int i in generatedNum)
      {
          Console.WriteLine("{0}", i);
      }
      

      【讨论】:

        【解决方案4】:

        改变

         foreach (int i in generatedNum)
                {
                    Console.WriteLine("{0}", generatedNum[i]);
                }
        

         for (int j=0;j<generatedNum.Length;j++)
                {
                    Console.WriteLine("{0}", generatedNum[j]);
                }
        

        【讨论】:

          【解决方案5】:

          这样可以吗

          如果你被允许使用 Linq,你可以尝试这样的事情

          你可以设置你想要的范围

            Random rnd = new Random();
                  var randomNumbers = Enumerable.Range(1, 100)
                                                .Select(x => new { val = x, order = rnd.Next() })
                                                .OrderBy(i => i.order)
                                                .Select(x => x.val)
                                                .Take(10).ToArray();
          

          【讨论】:

          • 为什么 OP 会这样做呢?少了几行但更难阅读的代码?亲吻
          • 另外,如果你从随机函数中得到 "1,2,2,4,5,6,6,7,7,8" 怎么办?你不需要这个:“.Select(x => x.val)”
          • 那么 OP 会得到什么?少了几行但更难阅读的代码?亲吻
          【解决方案6】:
              static void Main(string[] args)
              {
                  var generatedNum = new List<int>();
                  var random = new Random();
          
                  while (generatedNum.Count < 10)
                  {
                      var tempo = random.Next(0, 25);
          
                      if (generatedNum.Contains(tempo)) continue;
                      generatedNum.Add(tempo);
                  }
          
                  foreach (var i in generatedNum)
                  {
                      Console.WriteLine("{0}", i);
                  }
              }
          

          你的问题是不是在这里?

              // To check the number saved
              foreach (int i in generatedNum)
              {
                  Console.WriteLine("{0}", generatedNum[i]);
              }
          

          【讨论】:

            【解决方案7】:

            /*试试这个,我用一个数组列表来存储数字

            using System;
            using System.Collections;
            public class SamplesArrayList
            {
            
                public static void Main()
                {
            
                    // Creates and initializes a new ArrayList.
                   ArrayList values = new ArrayList();
                    Random random = new Random();
            
                    values.Add(random.Next(0, 25));
            
                    while (values.Count < 10)
                    {
                        int newValue;
            
                        do
                        {
                            newValue = random.Next(0, 25);
                        } while (values.Contains(newValue));
            
                        values.Add(newValue);
                    }
            
                    PrintValues(values);
                }
                public static void PrintValues(IEnumerable myList)
                {
                    foreach (Object obj in myList)
                        Console.Write("   {0}", obj);
                    Console.WriteLine(myList);
                }
            
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-02-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多