为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕的地8271018 2021-11-14 17:17:35
好吧,这完全是一个菜鸟问题。振作起来。我正在尝试使用 While 循环将值分配给数组,但我收到一个索引超出数组错误消息的范围。这是它的样子:int [] Counter = new int [46];xCount = 0;while (xCount != 47){    Counter[xCount] = (xCount * 10000);    xCount++;   }我应该使用不同的 C# 代码来设置数组中的值吗?提前感谢您的任何答案/见解!
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

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++)

{

     Counter[i] = i*10000;

}

还要注意我是如何使用数组的长度而不是对数字进行硬编码的。这确保我们不会离开数组的末尾。您代码中的错误实际上与此有关。当您编写时,new int [46]您正在创建一个包含 46 个元素的数组。这意味着该数组的有效索引是 0-45。您的循环尝试使用索引 46,正如异常所抱怨的那样,它超出了数组的范围。


查看完整回答
反对 回复 2021-11-14
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

简短回答:C# 中的索引从 0 开始,因此元素的数量总是比数组的最后一个索引大 1!即:您有 2 个元素,索引:0 和 1。

您的情况:您用 46 个元素初始化数组,然后您的索引在 0-45 范围内。


查看完整回答
反对 回复 2021-11-14
  • 2 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信