在for循环中迭代维度的其他部分会抛出IndexOutOfRangeException(C#)

时间:2016-04-13 02:25:35

标签: c#

在C#控制台应用程序中迭代二维数组的一个维度时遇到问题。这是游戏的一部分,每次你错过一个镜头,或者你成功拍摄时都会产生诙谐的回答。让我从一个我做过的二维布尔值开始:

public static bool[,] hasResponseBeenUsedBefore = new bool[2, 11];

第一维中有两行。 1是伴随射击成功的反应。并且2是伴随着错过镜头的反应。

在我创建的用于生成响应的方法中,我尝试迭代第二维。

int usedManyTimes = 0;
for (int i = 0; i < hasResponseBeenUsedBefore.GetLength(1); i++)
{
     MessageBox.Show(i.ToString());
     if (hasResponseBeenUsedBefore[2, i] == true) // 2 is the dimension for unsuccessful responses
     {                    
          usedManyTimes++;
     }
 }

我试图获得第二维的长度但没有成功。它会抛出一个IndexOutOfRangeException,其中包含以下信息:

  

HResult:-2146233080

     

异常消息:索引超出了数组的范围。

对此的任何帮助将不胜感激。谢谢你的时间。

2 个答案:

答案 0 :(得分:2)

数组使用从零开始的索引。第一维中的数组大小为2,因此它只有索引0和1可用。第二个维度数组的大小为11,因此它们的索引0到(包括)10可用。

尝试

int usedManyTimes = 0;
for (int i = 0; i < hasResponseBeenUsedBefore.GetLength(1); i++)
{
     MessageBox.Show(i.ToString());
     if (hasResponseBeenUsedBefore[1, i] == true)//notice the change from [2,i] to [1,i] here
     {                    
          usedManyTimes++;
     }
}

答案 1 :(得分:2)

让#34;不成功&#34;维度,使用1,而不是2

if (hasResponseBeenUsedBefore[1, i] == true)

数组使用从零开始的索引。定义类似的数组时:

var hasResponseBeenUsedBefore = new bool[2, 11];

您可以使用hasResponseBeenUsedBefore[0][0]hasResponseBeenUsedBefore[1][10]来访问其元素。