索引超出数组范围:杂货项目列表添加
Posted
技术标签:
【中文标题】索引超出数组范围:杂货项目列表添加【英文标题】:Index was outside the bounds of the array: Grocery item list addition 【发布时间】:2014-04-02 23:38:28 【问题描述】:我正在做一种方法,用户可以选择他/她想要列出的杂货数量。该杂货项目金额之前由 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++;
【问题讨论】:
【参考方案1】:数组从 0 开始。你在第 4 行犯了一个错误,应该是
strNumofPurchaseArray[intGroceryAmount] = strNewItemInput;
您正在创建一个 intGroceryAmount 项目数组,但数组中的最高索引是 intGroceryAmount - 1,最低的是 0。
【讨论】:
是的,感谢该问题现在已解决。但是我的循环仍然没有显示所有的购物清单项目。它提到了最后一个,它只是新的,其他的留空 while (intNewItemCounter 这是输出,如果您想知道杂货项目 #1 是:-blank- 杂货项目 #2 是:-blank- 杂货项目 #3 是:(新项目输入) 我不会写 C#,但你不应该在使用之前将你的 intNewItemCounter 初始化为 0 吗?尝试在 for 循环之前添加intNewItemCounter = 0
。您还应该按照其他人的建议考虑使用 List (如果您只是在学习 C# 的某种课程,请跳过它)。
是的,之前已经声明过,这是一个更大的任务的一小部分,所以所有声明都是之前完成的,计数器应该没有问题,因为我正在显示当我提到杂货项目#时的柜台,它们都正确列出,它只是下一部分,即项目本身,除了新的,没有显示。是的,我不允许使用 List 函数,只能使用简单的数组和其他简单的东西,比如 ifs 和循环
啊,是的,我明白了,问题是您制作了一个新数组,但您没有填写旧值。当您分配比以前大一个元素的数组时,请使用 for 或 while 循环将旧数组的内容复制到新数组中。【参考方案2】:
如果您希望能够调整列表大小,那么我建议您使用List<string>
,当您调用Add
时它会自动调整大小。如果您必须坚持使用数组,那么您可能应该查看Array.Resize
调整大小的方法,该方法也会自动将旧数组中的项目复制到新数组中。然后,您应该使用 foreach
循环来枚举项目。
【讨论】:
【参考方案3】:数组在 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]);
【讨论】:
以上是关于索引超出数组范围:杂货项目列表添加的主要内容,如果未能解决你的问题,请参考以下文章
在 ForEach 循环中删除项目会导致致命错误:索引超出范围
致命错误:索引超出范围,同时在 SwiftUI 的列表中从 Firebase 中删除项目