索引超出了数组的范围:Grocery项目列表添加

时间:2014-04-02 23:38:28

标签: c# arrays

我正在做一种用户选择他/她想要列出的杂货数量的方法。之前通过intGroceryAmount(从strGroceryAmount解析)

声明了杂货项目金额

现在,如果用户想要将另一个项目添加到购物清单,则必须将数组大小增加1,并且必须显示购物清单中的所有项目,包括新添加

我尝试将1添加到数组大小,以便现在有一个额外的空间,并为新的杂货项目分配用户输入的空白​​区域。不幸的是,这是发生错误的地方

P.S:最后显示的循环是"假设"显示杂货店的所有商品

strNumofPurchaseArray = new string[intGroceryAmount + 1];
System.Console.WriteLine("What is the new item you wish to enter?");
strNewItemInput = System.Console.ReadLine();
strNumofPurchaseArray[intGroceryAmount + 1] = strNewItemInput;

System.Console.WriteLine("\nYour new list of Grocery item is shown below:\n");
while (intNewItemCounter < intGroceryAmount)
{
    System.Console.WriteLine("Grocery item #" + (intNewItemCounter + 1) + "is: " + strNumofPurchaseArray[intNewItemCounter]);
    intNewItemCounter++;

3 个答案:

答案 0 :(得分:2)

阵列从0开始。你在第4行犯了一个错误,应该是     strNumofPurchaseArray[intGroceryAmount] = strNewItemInput;

您正在创建一个intGroceryAmount项的数组,但数组中的最高索引是intGroceryAmount - 1,最低的是0。

答案 1 :(得分:0)

如果您希望能够调整列表大小,我建议您使用List<string>,当您拨打Add时会自动调整大小。如果您必须坚持使用数组,那么您应该查看Array.Resize调整大小的方法,它会自动将旧数组中的项目复制到新数组中。然后,您应该使用foreach循环来枚举项目。

答案 2 :(得分:0)

Arrays在C#中不会那样工作。当您事先了解结构的大小时,它们的效果最佳。如果您需要以动态方式添加和删除项目,最好的选择是List<T>

var strNumofPurchaseArray = new List<string>();
System.Console.WriteLine("What is the new item you wish to enter?");
strNewItemInput = System.Console.ReadLine();
strNumofPurchaseArray.Add(strNewItemInput);

System.Console.WriteLine("\nYour new list of Grocery item is shown below:\n");
for(int i=0; i< strNumofPurchaseArray.Count; i++)
{
   System.Console.WriteLine("Grocery item #" + (i + 1) + "is: " + strNumofPurchaseArray[i]);
}