C#随机数存储与校验疑问及在线编译器刷新异常澄清
解决C#随机数“重复生成”的困惑:在线编译器刷新的锅!
先梳理你的核心困扰
你一开始的疑问是:想实现不重复的随机数生成,把生成的随机数存下来用于答案判断,但每次输入答案时,总觉得随机数被重新生成了——比如生成了44,你输入48后,不知道怎么调用之前的随机数来验证对错。
真相揭晓:代码本身完全没问题!
你后来澄清的关键点太重要了:问题出在你使用的在线编译器上——每次输入答案时编译器会自动刷新重启程序,导致你误以为循环生成的随机数集合被重新创建了。因为没有Visual Studio才选择在线编译器,这种场景完全能理解,不用抱歉~
附上你的参考代码
public static void Main() { Random rand = new Random(); int count, a, b, x, y; Console.Write("Sequence: "); count = int.Parse(Console.ReadLine()); Console.Write("Minima: "); x = int.Parse(Console.ReadLine()); Console.Write("Maxima: "); y = int.Parse(Console.ReadLine()); int[] roll = new int[count]; for(a = 0; a < count; a++){ roll[a] = rand.Next(x, y); } Console.Write("( "); foreach(var nr in roll){ Console.Write(nr + " "); } Console.WriteLine(")"); Console.WriteLine(""); int[] answer = new int[count]; for(b = 0; b < count; b++){ Console.Write("{0}. Answer: ",b+1); answer[b] =int.Parse(Console.ReadLine()); } Console.ReadLine(); }
额外小补充:添加答案判断功能
既然代码本身没问题,如果你想实现“对比输入答案和生成的随机数是否正确”,可以在最后加一段简单的对比逻辑,比如:
// 新增答案验证逻辑 Console.WriteLine("\n--- 答案验证结果 ---"); for(int i = 0; i < count; i++) { bool isCorrect = answer[i] == roll[i]; Console.WriteLine($"第{i+1}题:你的答案{answer[i]},正确答案{roll[i]} → {(isCorrect ? "✅ 正确" : "❌ 错误")}"); }
这段代码会遍历你存储随机数的roll数组,和输入答案的answer数组做逐一对比,只要程序不被编译器刷新重启,roll里的随机数就会一直保留,不会重新生成。
在线编译器小建议
如果之后还要用在线编译器练习,建议选那种支持持续会话的工具(也就是不会因为输入就重启整个程序的),这样就能避免这种误解啦~
内容的提问来源于stack exchange,提问作者Gabriel Angel
相关产品推荐
相关产品推荐

