避免随机重复System.Randomgenerator=newRandom(DateTime.Now.Millisecond);int[]lotteryNumber=newint[7];Console.WriteLine("您的开奖号码:");对于(inti=0;i<7;i++){lotteryNumber[i]=generator.Next(1,37);Console.Write("{0}",lotteryNumber[i]);}Console.ReadLine();我需要制作一个打印7个彩票号码但不重复的程序。上面的代码在(1-37)范围内打印7个随机数,但重复出现。我需要一种方法来防止出现重复的数字。IMO最简单的方法是生成所有可能数字的序列(即1-37),洗牌,然后取前7个结果。在StackOverflow上搜索“Fisher-YatesshuffleC#”会找到很多示例。事实上,您可以修改Fisher-Yatesshuffle以在获取结果时生成结果,因此您可以编写如下方法:varnumbers=Enumerable.Range(1,37).Shuffle().Take(7).ToList();您可以使用字典,但一定要防止重复键插入。字典的键将作为您需要的唯一编号,您可以将它们放入HashSet中。如果您添加并返回false,则会生成一个新数字。如果你试图从一个范围内选择数字而不重复它们,你需要创建一个包含所有可能数字的数组,然后“随机”选择一个随机数:int[]allPossibleNumbers=Enumerable.Range(1,37).ToArray();int[]lotteryNumber=newint[7];for(inti=0;i生成一个包含37个项目的列表。然后在您的for中,选择一个并删除所选的也许这可能会有所帮助,如果您获得现有数字,只需尝试查找不在数组中的新数字:staticvoidMain(string[]args){System.Randomgenerator=新随机(DateTime.Now.Millisecond);int[]lotteryNumber=newint[7];Console.WriteLine("您的开奖号码:");for(inti=0;iHashSetset=newHashSet();System.Randomgenerator=newRandom(DateTime.Now.Millisecond);while(set.Count这应该有效,因为HashSet会自动忽略重复项。只需循环直到集合达到你需要的单位数。只有潜在的问题是它有可能(不太可能)循环很长时间,但它最终应该响应。所以我拿了你的原始代码......发现了一些逻辑错误并添加了修复你想要的,以防止随机数重复。请享用!System.Randomgenerator=newRandom(DateTime.Now.Millisecond);int[]lotteryNumber=newint[7];int下界=1;int上限=8;intmaxNumberLotteryValues=7;如果((upperBounds-lowerBounds)constintnBalls=37;constintnPicks=6;int[]balls=newint[nPicks];Randomrnd=newRandom(DateTime.Now.Millisecond);intremainingBalls=nBalls;intremainingPicks=nPicks;for(inti=1;i随着nPicks/nBalls变大,它会超越Shuffle和HashSet方法。以上是C#学习教程:避免随机重复和分享整个内容。注意---这个文章收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明出处:
