C#调用AddItem方法为并行数组添加元素时新值覆盖旧值问题求解
问题原因
AddItem方法每次执行都会把内部的count变量初始化为0,所有新数据都会固定写入数组的第0位,直接覆盖之前的内容- 调用
AddItem时没有传递当前已经存储的元素数量logicalArraySize,方法无法判断新内容应该写入的下标位置 - 方法返回的
count每次都是1,会直接覆盖主方法中记录真实元素数量的logicalArraySize,导致计数丢失
修复方案
1. 调整Main方法中AddItem的调用逻辑
传入当前逻辑长度,并且增加数组容量校验,避免下标越界:
if (userChoice == '1') { // 仅当数组未满时允许新增 if(logicalArraySize < PHYSICAL_ARRAY_SIZE) { logicalArraySize = AddItem(menuItems, menuPrices, logicalArraySize); } else { Console.WriteLine("数组已满,无法新增更多项目"); Console.ReadKey(); } }
2. 修改AddItem方法的定义和内部逻辑
新增入参接收当前已存元素数量,用该值作为新数据的写入下标:
public static int AddItem(string[] items, double[] prices, int currentCount) { double price; string description; Console.Clear(); Console.WriteLine("New Item"); Console.WriteLine("-----------------------------------------"); Console.WriteLine("Enter an item to add to bill: "); string message = "Enter description: "; description = PromptForStringNotEmpty(message); Console.Write($"Enter price of {description}: "); price = GetSafeDouble(); Console.WriteLine("Add Item was successful"); Console.WriteLine("Press any key to continue..."); Console.ReadKey(); Console.Clear(); // 用传入的当前计数作为写入下标 prices[currentCount] = price; items[currentCount] = description; // 返回加1后的最新元素数量 return currentCount + 1; }
内容的提问来源于stack exchange,提问作者CheckDeck
相关产品推荐
相关产品推荐

