【问题标题】:Select a number randomly from 1 to 99从 1 到 99 中随机选择一个数字
【发布时间】:2014-03-29 05:14:35
【问题描述】:

我想从199 中选择一个随机数。然后再次选择号码,但这次丢弃之前的号码。谁能帮帮我。

【问题讨论】:

  • 丢弃之前的号码是不是每次都生成唯一号码?
  • 是的,应该从其余数字中选择否。
  • 这个我想编写一个叫Housie的游戏

标签: c# .net random


【解决方案1】:
private List<int> numbers = Enumerable.Range(0, 100).ToList();
private Random rnd = new Random();

public int GetRandomInt()
{
    var index = rnd.Next(0, numbers.Length);
    var number = numbers[index];
    numbers.RemoveAt(index);
    return number;
}

【讨论】:

  • 非常好,但是序列需要从 1 到 99 的范围:应该避免零。
  • 我正在为生成按钮编写此代码。所以每次我点击生成它都会生成唯一的数字对吗????
【解决方案2】:

这是我要做的:

var rnd = new Random();
var numbers = new Stack<int>(Enumerable.Range(1, 99).OrderBy(x => rnd.Next()));

您实际上是在随机化数字列表,然后将它们添加到堆栈中。现在您只需执行此操作即可获取每个数字:

var next = numbers.Pop()

numbers.Count == 0 时你停下来。很简单。

【讨论】:

    【解决方案3】:

    我通常用数组来做。

    每当您创建一个随机数时,只需将其放入数组即可。所以下次通过检查数组来检查数字是否已经生成。

    【讨论】:

      【解决方案4】:

      试试这个

                  IList<int> arr = Enumerable.Range(1, 99).ToList();
                  int randNum;
                  Random rnd = new Random();
                  randNum = rnd.Next(1, arr.Count());
                  MessageBox.Show(randNum.ToString());
                  arr = arr.Where(x => x != randNum).ToList();
      

      【讨论】:

        【解决方案5】:

        这里是Khanh TO的修改版,因为不正确:

                List<int> usedNumbers = new List<int>();
        
                Random rand = new Random(new object().GetHashCode());
                int number = 0;
                for (int i = 0; i < 99; i++)
                {
                    do
                    {
                        number = 1 + rand.Next(0, 99);
                    } while (usedNumbers.Contains(number));
                    usedNumbers.Add(number);
                }
        

        【讨论】:

        • 此代码将给我 1 随机无权。当我必须随机找到下一个时,我也必须使用相同的代码??????
        • 不明白。如您所问,上面的代码会生成一个数字列表。该列表包含已经将被提取的数字序列。您不必重新运行代码,除非您想重新开始游戏。然而,Enigmativity 的解决方案是最优雅的。 MarcinJuraszek 的那个也很有价值。我发布这个只是因为原始代码错误。
        【解决方案6】:

        我可以选择最短的代码,没有嵌套循环,或者删除列表元素吗?

        代码 1

        class Program
        {
            static Random rnd=new Random();
            static void Main(string[] args)
            {
                var list=new SortedDictionary<double, int>();
                // Fill list
                for (int i=1; i<=99; i++)
                {
                    list.Add(rnd.NextDouble(), i);
                }
                // List Automatically random
                var random_int=list.Values.ToArray();
                // random_int = {45, 7, 72, .. }
            }
        }
        

        代码 2

        class Program
        {
            static Random rnd=new Random();
            static void Main(string[] args)
            {
                var list=new int[99];
                // Fill list
                for (int i=1; i<=99; i++)
                {
                    list[i-1]=i;
                }
                Comparison<int> any=(x, y) =>
                {
                    var z=2*rnd.NextDouble()-1;
                    return z.CompareTo(0);
                };
                // Randomize List
                Array.Sort(list, any);
                // list = { 49, 59, 21, 7, 18 ...}
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-10
          • 2020-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-19
          • 2020-04-04
          • 1970-01-01
          相关资源
          最近更新 更多