如何用循环对比随机数数组与用户输入数组找共同元素?
彩票号码程序问题排查与修复
需求说明
- 接收用户输入10个1-25之间的数字,存入用户数组;输入值不符合范围的,不存入数组,重新获取输入
- 生成10个1-25的随机数字,存入随机数数组
- 仅通过循环对比两个数组,统计并告知用户猜对的数字数量
现存问题
使用continue处理无效输入时程序异常,调整循环括号位置后,数组对比逻辑无法正常工作
用户原代码
//User array int[] användarTal = new int[10]; //Random numbers array int[] slumpadeTal = new int[10]; //Generator for 10 random numbers. Random randomerare = new Random(); //Foor-loop for storing user's 10 guesses in the user array. for (int i = 0; i < användarTal.Length; i++) { Console.Write("Enter your guess: "); string input = Console.ReadLine(); int num = Convert.ToInt32(input); användarTal[i] = num; //If the user enters wrong value if (num < 1 || num > 25) { Console.WriteLine("Wrong! You must enter a number between 1-25!"); användarTal[i] = i--; //Wrong number will not be stored in the user array. } // continue; // } //For-loop for storing and writing out the 10 random numbers. for (int j = 0; j < slumpadeTal.Length; j++) { Console.WriteLine(randomerare.Next(1, 26)); // Checking if the two arrays have any common numbers if (användarTal[i] == slumpadeTal[j]) { Console.WriteLine(användarTal[i]); } } }
用户尝试的参考示例代码
int[] arr1 = { 12, 5, 45, 47, 22, 10 }; int[] arr2 = { 23, 45, 10, 58, 78, 77, 46 }; for (int i = 0; i < arr1.Length; i++) { for (int j = 0; j < arr2.Length; j++) { if (arr1[i] == arr2[j]) { Console.WriteLine(arr1[i]); } } }
问题分析与修复后的代码
原代码核心问题
- 随机数未存入数组:原代码只打印了随机数,但没把值赋值给
slumpadeTal[j],导致对比时数组全是默认值0,无法正确匹配 - 无效输入处理错误:
användarTal[i] = i--;逻辑混乱,应该通过i--让循环回到当前索引,重新获取有效输入,同时不要给数组赋值无效值 - 对比循环位置错误:对比逻辑嵌套在用户输入的循环里,导致每输入一个数就重新生成随机数并对比,完全不符合需求,应该在用户输入完成、随机数全部生成后再执行对比
修复后的完整代码
// 用户数组:存储10个有效输入 int[] användarTal = new int[10]; // 随机数数组:存储10个1-25的随机数 int[] slumpadeTal = new int[10]; Random randomerare = new Random(); // 1. 收集用户的10个有效输入 for (int i = 0; i < användarTal.Length; ) { Console.Write("请输入你的猜测数字(1-25):"); string input = Console.ReadLine(); // 先判断输入是否能转成整数,避免格式错误崩溃 if (!int.TryParse(input, out int num)) { Console.WriteLine("请输入有效的整数!"); continue; } // 验证数字范围 if (num < 1 || num > 25) { Console.WriteLine("错误!必须输入1-25之间的数字!"); continue; } // 有效输入存入数组,索引自增 användarTal[i] = num; i++; } // 2. 生成并存储10个随机数 Console.WriteLine("\n生成的中奖号码为:"); for (int j = 0; j < slumpadeTal.Length; j++) { slumpadeTal[j] = randomerare.Next(1, 26); Console.Write(slumpadeTal[j] + " "); } Console.WriteLine(); // 3. 对比两个数组,统计猜对的数量 int correctCount = 0; Console.WriteLine("\n你猜对的数字有:"); for (int i = 0; i < användarTal.Length; i++) { for (int j = 0; j < slumpadeTal.Length; j++) { if (användarTal[i] == slumpadeTal[j]) { Console.Write(användarTal[i] + " "); correctCount++; // 避免重复统计同一个数字(如果用户输入重复的话) break; } } } Console.WriteLine($"\n总共猜对了 {correctCount} 个数字!");
关键修复点说明
- 用
int.TryParse处理输入格式错误,避免程序崩溃 - 修改用户输入循环的逻辑:只有输入有效时才让索引
i自增,确保数组里全是符合要求的数字 - 把随机数正确存入数组,而不是只打印
- 将对比逻辑放在所有数据准备完成后执行,使用嵌套循环遍历两个数组统计匹配数量
内容的提问来源于stack exchange,提问作者Ronnika Olsson
相关产品推荐
相关产品推荐

