如果数字与前一个匹配,则生成一个随机数

时间:2014-03-05 12:24:21

标签: c# random

我想创建一个随机数字,前面有文字,我不希望系统显示两次数字。所以,这就是我这样做的方式:

Random _rand = new Random();

private void RandomNumberGenerator()
        {
            int random = _rand.Next(10000);
            string text = "TP0" + random;

            if (random.Equals(random))
            {
                _rand.Next();
            }

            else
            {
                random = _rand.Next(10000);
            }

            MessageBox.Show(text);
        }

我没有得到任何显示的数字两次(但我不太确定,因为我只是关闭程序,直到它显示数字5次(所有这些都不是相同的数字)。

从上面的代码可以有机会两次显示数字吗?

谢谢。

2 个答案:

答案 0 :(得分:4)

编辑以摆脱魔法数字并确保理智。

  Random _rand = new Random();
  HashSet<int> _taken = new HashSet<int>();
  object _syncRoot = new object();

  private int RandomNumberGenerator() {
    lock (_syncRoot) {
      const int MAX_NUMBER = 10000;
      if (_taken.Count == MAX_NUMBER) {
        throw new Exception("All possible numbers are already generated.");
      }

      int random = _rand.Next(MAX_NUMBER);
      while (_taken.Contains(random)) {
        random = (random + 1) % MAX_NUMBER;
      }
      _taken.Add(random);
      return random;
    }
  }

答案 1 :(得分:1)

Soner Gonul是正确的,随机的。我认为,等于(随机)总是如此。 你可以通过另一个int变量来解决它(粗略地),它将成为生成的最后一个数字,然后当函数进入它的下一个循环时它让它引用新的随机数变量存储在第二个变量中,这是前一个随机数。这是做到这一点的一种方式,如果你不理解,我可以尝试在一分钟内更明确地定义