如果数字与前一个匹配,则生成一个随机数
我想创建一个随机数字,前面有一个文本,我不希望系统显示两次数字。 所以,这就是我做的方式:
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次(所有这些都不是相同的数字)。
从上面的代码可以有机会两次显示数字吗?
谢谢。
编辑以摆脱魔法数字并确保理智。
Random _rand = new Random(); HashSet _taken = new HashSet (); 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; } }
Soner Gonul是正确的,随机的。我认为,平等(随机)总是如此。 您可以(大致)通过使用另一个int变量来解决它,这将变成生成的最后一个数字, 然后当函数进入它的下一个循环时,它将引用新的随机数变量与存储在第二个变量中的变量相对应,是以前的随机数。 这是一种做法,如果你不明白,我可以尝试在一分钟内更明确一点
- 为什么我的Sitecore.Context.Language在Controller中重置?
- 如何在XDocument中删除除root之外的节点的xmlns属性
- 在C#中将字符串计算为属性
- 使用EWS和Exchange 2007通过对话实现Outlook 2010的组
- 多个彼此了解的授权属性
- 如何在visual studio 2013中禁用mscorlib.dll?
- c#通过socket发送图像和posibble一样快
- 需要帮助了解Ninject如何将Nhibernate SessionFactory实例添加到UnitOfWork中?
- 使用TaskCompletionSource作为WaitHandle替代品是否可以接受?