索引超出数组范围:杂货项目列表添加

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&lt;string&gt;,当您调用Add 时它会自动调整大小。如果您必须坚持使用数组,那么您可能应该查看Array.Resize 调整大小的方法,该方法也会自动将旧数组中的项目复制到新数组中。然后,您应该使用 foreach 循环来枚举项目。

【讨论】:

【参考方案3】:

数组在 C# 中不是这样工作的。当您预先知道结构的大小时,它们的效果最好。如果您需要动态添加和删除项目,最好的选择是 List&lt;T&gt;

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 循环中删除项目会导致致命错误:索引超出范围

将类添加到列表 C# 时,索引超出了数组的范围

致命错误:索引超出范围,同时在 SwiftUI 的列表中从 Firebase 中删除项目

Swift,CollectionView,致命错误:索引超出范围

来自数组索引的表视图超出范围