C#数组统计求助:实现用户选品后统计商品出现次数
解决C#购物车商品统计问题
嘿,别着急!刚看了你的代码,思路方向是对的,就是还差统计次数的核心逻辑,还有几个小细节没处理到位。我帮你把代码补全并解释清楚,新手也能轻松看懂~
核心问题分析
你现在的代码只处理了选项1,而且还没完成统计次数的步骤就直接输出了,所以没法得到正确的数量和商品名。我们需要先把用户选择的数字映射到对应的商品名称,再遍历数组统计出现次数,最后输出结果。
完整可运行代码
// 定义购物车数组 string[] arrayCart = { "Apple", "Orange", "Grape", "Orange", "Corn", "Apple", "Grape", "Apple", "Orange", "Orange" }; // 显示菜单选项 Console.WriteLine("\r\nChoose an item:"); Console.WriteLine("\r\n[1] - Apples"); Console.WriteLine("\r\n[2] - Oranges"); Console.WriteLine("\r\n[3] - Grape"); Console.WriteLine("\r\n[4] - Corn"); // 处理用户输入并做有效性验证 if (int.TryParse(Console.ReadLine(), out int cartItem) && cartItem >= 1 && cartItem <= 4) { // 根据用户选择的数字匹配对应的商品名称 string targetItem = cartItem switch { 1 => "Apple", 2 => "Orange", 3 => "Grape", 4 => "Corn", _ => "" // 这里因为已经做了输入验证,所以不会走到这个分支 }; // 统计目标商品在购物车中的出现次数 int itemCount = 0; foreach (string item in arrayCart) { if (item.Equals(targetItem, StringComparison.OrdinalIgnoreCase)) { itemCount++; } } // 输出最终结果(用字符串插值更直观) Console.WriteLine($"In the shopping cart there are {itemCount} {targetItem}(s)"); } else { // 处理用户输入无效的情况 Console.WriteLine("Invalid selection! Please enter a number between 1 and 4."); }
关键优化点说明
- 输入验证:用
int.TryParse替代Convert.ToInt32,避免用户输入非数字时程序崩溃;同时增加范围判断,确保输入是1-4的有效选项。 - 商品映射:用C# 8.0+的switch表达式替代传统switch语句,代码更简洁紧凑(如果用旧版本C#,换成普通switch也可以)。
- 统计逻辑:初始化计数器
itemCount为0,通过foreach遍历数组(也可以用for循环),每匹配到目标商品就给计数器加1。 - 大小写兼容:用
StringComparison.OrdinalIgnoreCase做匹配,避免因为大小写不一致导致统计错误(比如数组里是"Apple",用户选的是"apple"也能正确统计,不需要的话可以去掉)。 - 结果输出:用字符串插值
$""替代传统的占位符{0},代码可读性更高。
原来代码的问题修正
你之前的代码在for循环里直接输出,且没完成统计就break,导致逻辑断裂。现在调整后,先确定目标商品 → 统计次数 → 输出结果,整个流程逻辑清晰,能正确实现你想要的功能。
内容的提问来源于stack exchange,提问作者Rockit
相关产品推荐
相关产品推荐

