C#控制台应用中实现用户订单输入收集、商品展示及价格计算的问题
C#控制台应用中实现用户订单输入收集、商品展示及价格计算的问题
嘿,我看了你的代码,马上就发现问题所在啦!你现在的List<string> list是放在Start标签之后的,每次用户输入完跳转回Start时,都会重新创建一个全新的列表——之前添加的商品当然就没啦!这就是为什么list.Add看起来没生效的原因。
另外,我们还可以优化一下输入验证(避免用户输入非数字导致程序崩溃),同时把价格计算的逻辑也加上。下面是修改后的完整代码,我给你标了关键改动点:
using System; using System.Collections.Generic; class Program { static void Main() { string[] computer = { "Cpu", "Gpu", "Ram", "Hard", "Motherboard" }; int[] price = { 30000, 70000, 20000, 25000, 40000 }; // 把列表移到循环外面!这样每次添加的内容都会保留 List<string> orderedItems = new List<string>(); List<int> orderedPrices = new List<int>(); Console.WriteLine("0 = Cpu, 1 = Gpu, 2 = Ram, 3 = Hard, 4 = Motherboard\n每次输入对应数字下单,输入5完成下单并计算总价"); Start: Console.Write("请输入你要订购的商品编号:"); // 用TryParse做输入验证,避免非数字输入崩溃 if (!int.TryParse(Console.ReadLine(), out int num)) { Console.WriteLine("输入无效,请输入数字!"); goto Start; } if (num >= 0 && num < 5) { // 同时添加商品名称和对应的价格到列表 orderedItems.Add(computer[num]); orderedPrices.Add(price[num]); Console.WriteLine($"已添加:{computer[num]}"); goto Start; } else if (num == 5) { Console.WriteLine("\n===== 你的订单详情 ====="); // 遍历展示所有订购的商品 foreach (var item in orderedItems) { Console.WriteLine(item); } // 计算总价 int totalPrice = 0; foreach (var p in orderedPrices) { totalPrice += p; } Console.WriteLine($"订单总价:{totalPrice}"); Console.WriteLine("下单流程完成!"); } else { Console.WriteLine("无效编号,请输入0-5之间的数字!"); goto Start; } } }
关键改动说明:
- 列表位置调整:把
orderedItems和orderedPrices移到Start标签之前,确保每次循环都使用同一个列表,不会丢失之前的订单内容。 - 输入验证优化:使用
int.TryParse代替Convert.ToInt32,当用户输入非数字时,程序不会直接崩溃,而是提示重新输入。 - 价格收集逻辑:新增了
orderedPrices列表来存储每个订单商品的价格,最后遍历计算总价。 - 用户反馈优化:添加了已添加商品的提示,还有订单详情的格式化输出,让用户体验更好。
你可以直接运行这段代码测试,现在输入多个商品编号后,输入5就能看到完整的订单列表和总价啦!
备注:内容来源于stack exchange,提问作者Parsa
相关产品推荐
相关产品推荐

