代码之家  ›  专栏  ›  技术社区  ›  Bruie

创建随机数

c#
  •  3
  • Bruie  · 技术社区  · 16 年前

    例如,我有一个从1到90的数字数组,一旦一个数字被调用,这个数字的属性就会改变。因此,我只想在属性没有改变的地方生成数字。

    我是用循环来完成的,但如果可能的话,我只是想要一个更简洁的方法。

    我现在的代码是:

        public object GenerateNumber()
        {
            bool alreadyCalled = false;
            while (!alreadyCalled)
            {
               Random randomNumber = new Random(System.DateTime.Now.Millisecond);
                int RandomNumberCalled = randomNumber.Next(1, 91);             
    
    
                if (Numbers.ToList().Find(x => x.Number == RandomNumberCalled).IsCalled != null)
                {    
    
                 // change number to is called and do other things. 
    
                }
            }
            return false;
        }
    
    4 回复  |  直到 16 年前
        1
  •  0
  •   Daniel MoÅ¡mondor    16 年前
    list<int> myNumbers=GetNumbers();
    Random r=new Random();
    while (myNumbers.Count()>0)
    {
      int index=r.Next(myNumbers.Count());
      ReportSelectedNumber(myNumbers[index]);
      myNumbers.RemoveAt(index);
    }
    

    确保你有 GetNumbers() ReportSelectedNumber() 用最近选定的号码做某事。

        2
  •  10
  •   Andrey    16 年前

    List 删除选定项,然后减小上边框。 shuffle 然后顺序访问会给你随机数字。或者使用Knuth shuffling(检查注释)。

        3
  •  6
  •   Anthony Pegram    16 年前

    任何 数字,然后按顺序剥离它们。

        4
  •  0
  •   Austin Salonen gmlacrosse    16 年前

    注意事项

    1. Random(...) 在循环中,当种子相同时将导致重复。在你的例子中,同样的毫秒会经常被击中。

    2. 随机数重复。在大量的迭代过程中,您会期望分布对于范围内的每个数字都是相当均匀的,但是对于任何给定的随机生成的数字,它不能对先前生成的数字有任何了解。

    要回答您的问题,您真正想要的是一个无序的数字列表,您应该能够将其调整到您的代码中:

    var randomOrderInts = Enumerable.Range(1, 91).OrderBy(x => Guid.NewGuid());