如何替换生成的随机数序列中重复的数字?
解决每行随机数序列去重复的问题
你的需求是让每行生成的6个1-48的随机数没有重复,比如把重复的41替换成其他不重复的数字。可以通过生成数字时检查已存在的数字,重复则重新生成的方式实现,修改后的代码如下:
using System; using System.Linq; // 引入Linq简化重复检查 class Program { static void Main() { Draw(); Console.ReadKey(); } static void Draw() { int choice; Random randomNum = new Random(); int[] numbers = new int[6]; Console.Write("enter line amount: "); choice = int.Parse(Console.ReadLine()); for (int i = 0; i < choice; i++) { Console.Write("\n"); Array.Clear(numbers, 0, numbers.Length); // 重置数组,避免上一行数据干扰 for (int j = 0; j < numbers.Length; j++) { int newNum; do { newNum = randomNum.Next(1, 49); // 检查当前已生成的前j个数字是否重复 } while (numbers.Take(j).Contains(newNum)); numbers[j] = newNum; Console.Write("{0} ", numbers[j]); } } } }
关键改动说明
- 引入
System.Linq命名空间,用Take(j).Contains(newNum)快速判断当前数字是否重复 - 用
do-while循环替代直接赋值,确保生成的数字在当前行内唯一 - 每行生成前调用
Array.Clear重置数组,避免上一行残留数据影响结果
如果不想依赖Linq,也可以用手动循环检查重复:
// 替换do-while内的判断逻辑 do { newNum = randomNum.Next(1, 49); bool isDuplicate = false; for (int k = 0; k < j; k++) { if (numbers[k] == newNum) { isDuplicate = true; break; } } } while (isDuplicate);
这样就能保证每行输出的6个随机数都是唯一的,不会出现重复值。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

