如何在C#中确保玩家输入不与数组内的值重复?
问题分析与修正代码
你的代码核心问题在于:
- 遍历整个数组(包括未赋值的初始0),导致重复输出错误提示
- 逻辑判断顺序混乱,错误提示会被多次触发
do-while没有终止条件,无法正常退出输入循环
以下是不使用bool变量的修正方案:
using System; class Program { public static void Main (string[] args) { Console.WriteLine("Bingo!"); Console.WriteLine("To play bingo, you need 1 bingo card with 10 numbers between 1-20."); Console.WriteLine("Then, one number is randomly drawn, and if it matches any of the card's numbers, you get bingo."); Console.WriteLine(""); int[] heltal = new int[10]; Random slump = new Random(); int slumpNummer = slump.Next(1, 21); for(int i = 0; i < heltal.Length; i++) { do { Console.WriteLine($"Enter number {i + 1}:"); int spelarInput = int.Parse(Console.ReadLine()); // 先判断范围是否合法 if (spelarInput > 20 || spelarInput < 1) { Console.WriteLine("You entered a number outside the valid range. Please enter a number between 1 - 20."); continue; } // 只遍历已经输入的元素(前i个),避免和未赋值的0比较 int k; for(k = 0; k < i; k++) { if (heltal[k] == spelarInput) { Console.WriteLine("You entered a number that has already been used. Please enter a different number."); break; } } // 遍历完前i个都没找到重复,说明输入有效 if (k == i) { heltal[i] = spelarInput; break; } } while(true); } Console.WriteLine("Your numbers:"); foreach(int num in heltal){ Console.Write(num); Console.Write(" "); } Console.WriteLine($"\nBingo number {slumpNummer}"); } }
关键修改点
- 调整判断顺序:先检查输入范围是否合法,不合法直接提示并重新输入
- 限定遍历范围:只遍历数组中已经输入的前
i个元素,避免和未赋值的初始值0比较,减少无效判断 - 利用循环变量终止输入:通过内层循环变量
k的最终值判断是否找到重复,若k == i说明没有重复,赋值后跳出do-while循环 - 移除多余嵌套:把重复判断从
foreach中移出,避免多次输出错误提示
内容的提问来源于stack exchange,提问作者Zwap02
相关产品推荐
相关产品推荐

