You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:58:56