猿问

使用 While 循环分配数组值会生成“数组边界外的索引”

好吧,这完全是一个菜鸟问题。振作起来。


我正在尝试使用 While 循环将值分配给数组,但我收到一个索引超出数组错误消息的范围。这是它的样子:


int [] Counter = new int [46];


xCount = 0;

while (xCount != 47)

{

    Counter[xCount] = (xCount * 10000);

    xCount++;   

}

我应该使用不同的 C# 代码来设置数组中的值吗?提前感谢您的任何答案/见解!


慕的地8271018
浏览 183回答 2
2回答

吃鸡游戏

var Counter = Enumerable.Range(0,47).Select(x=>x*10000).ToArray();应该给你一个 47 个元素的数组。它使用LINQ Enumerable.Range,Select和ToArray方法。但是,停下来问问自己数组是否是最适合使用的东西(对于您要解决的任何问题)。有现代集合类比数组更适合大多数问题。一般来说,除非您自己编写集合类或需要与旧代码进行互操作,否则我建议您避开数组。另外,请注意上面的代码是声明性的。我说的是我想要的,而不用担心它是如何完成的细节。在幕后,可能是使用循环或其他某种机制来生成该范围;但我真的不在乎,我只想从那个范围开始,应用一个转换(通过选择),然后强制它进入一个数组。我也不关心它在中间阶段使用什么来存储该范围/计算。仍然有适合循环的地方 - 但是编写while循环并增加计数器有点奇怪。迭代数组的标准习惯用法是一个for循环:for(int i=0;i<Counter.Length;i++){&nbsp; &nbsp; &nbsp;Counter[i] = i*10000;}还要注意我是如何使用数组的长度而不是对数字进行硬编码的。这确保我们不会离开数组的末尾。您代码中的错误实际上与此有关。当您编写时,new int [46]您正在创建一个包含 46 个元素的数组。这意味着该数组的有效索引是 0-45。您的循环尝试使用索引 46,正如异常所抱怨的那样,它超出了数组的范围。

慕的地6264312

简短回答:C# 中的索引从 0 开始,因此元素的数量总是比数组的最后一个索引大 1!即:您有 2 个元素,索引:0 和 1。您的情况:您用 46 个元素初始化数组,然后您的索引在 0-45 范围内。
随时随地看视频慕课网APP
我要回答