C#随机数生成器重复生成相同数值问题求助
解决猜数字游戏重玩时随机数重复的问题
问题根源在于你只在程序启动时生成了一次随机数speltal,重玩游戏时并没有重新生成新的随机数,所以每次重玩都会使用同一个数字。
修复步骤
- 将随机数生成逻辑移到
while循环内部,确保每一轮游戏(包括重玩)都能生成新的随机数; - 保留唯一的
Random实例,避免短时间内多次实例化导致的随机数重复问题(系统时钟精度限制)。
修改后的完整代码
static void Main(string[] args) { // 声明变量 int min = 1; int max = 20; Random slumpat = new Random(); // 创建随机数实例 bool spela = true; // 控制游戏循环的变量 string igen = ""; while (spela) { // 每轮游戏开始时生成新的随机数 int speltal = slumpat.Next(min, max); int rättTal = speltal; int check = 0; Console.Write("\n\tGissa på ett tal mellan 1 och 20: "); Int32.TryParse(Console.ReadLine(), out int tal); if (tal < speltal) { Console.WriteLine("\tDet inmatade talet " + tal + " är för litet, försök igen."); } if (tal > speltal) { Console.WriteLine("\tDet inmatade talet " + tal + " är för stort, försök igen."); } if (tal == speltal) { Console.WriteLine("\tGrattis, du gissade rätt! Tryck på valfri knapp för att fortsätta."); Console.ReadLine(); Console.Clear(); check = 1; } if (check == 1) { Console.WriteLine("\tVill du spela igen? (j/n): "); igen = Console.ReadLine(); Console.Clear(); if (igen == "n") { break; } // 输入"j"时直接进入下一轮循环,自动生成新随机数 } } }
额外说明
- 无需每次重玩都重新创建
Random对象,单个实例多次调用Next方法就能生成足够随机的序列; - 移除了冗余的
continue语句,输入"j"时循环会自动进入下一次迭代,自然触发新随机数的生成。
内容的提问来源于stack exchange,提问作者Tobias Banstorp
相关产品推荐
相关产品推荐

