如何用C# List实现猜数字游戏并记录展示所有用户输入
解决C#用List记录猜数字游戏输入的问题
嘿,我看到你的问题啦!核心问题其实很简单——你把List<int>的创建放在了for循环内部,每次循环都会新建一个空的List,所以之前输入的数字根本没被保留下来,最后自然只能看到最后一次输入的内容。
快速修复思路
把List的声明移到for循环外面,这样整个游戏过程中都会用同一个List来记录所有输入的数字,每次输入后只需要调用InsertedNumbers.Add(c)就可以完成记录了。
另外你的代码里有两处重复打印List的逻辑,其实保留一个就够;原来的循环条件i <= 10会导致多执行一次,改成i < 10更贴合10次尝试的设定,我一起帮你调整了。
修改后的完整代码
static void Main(string[] args) { Random rnd = new Random(); int b = rnd.Next(1, 100); // 把List声明移到循环外,确保全程共用一个集合 List<int> InsertedNumbers = new List<int>(); int NumberOfTries = 1; Console.WriteLine("Guess number from 1 to 100. You have 10 tries."); for (int i = 0; i < 10; i++) { Console.Write("\nGuess number: "); int c = Convert.ToInt32(Console.ReadLine()); InsertedNumbers.Add(c); // 每次输入后添加到List中 if (c == b) { Console.WriteLine($"Bravo. You had {NumberOfTries} tries."); Console.WriteLine("Your guesses were:"); foreach (var item in InsertedNumbers) { Console.WriteLine(item); } break; } else if (c < b) { Console.WriteLine($"No. My number is larger than {c}"); NumberOfTries++; } else if (c > b) { Console.WriteLine($"No. My number is smaller than {c}"); NumberOfTries++; } } // 循环正常结束说明用完了10次机会,展示所有输入 if (InsertedNumbers.Count == 10) { Console.WriteLine("\nYou tried 10 times. Game is over!"); Console.WriteLine("Your guesses were:"); foreach (var item in InsertedNumbers) { Console.WriteLine(item); } } Console.ReadLine(); }
额外小提示
- List的优势确实如你所说,不用预先指定长度,能自动扩容存储任意次数的输入(只要在你设定的尝试限制内),比数组灵活太多。
- 用字符串插值
$"内容{变量}"代替字符串拼接,代码可读性会更好,比如我修改后的提示语句就是用了这种写法。
内容的提问来源于stack exchange,提问作者Nikola Kaljevic
相关产品推荐
相关产品推荐

