在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
异常消息:索引超出了数组的范围。
对此的任何帮助将不胜感激。谢谢你的时间。
答案 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]
来访问其元素。