为什么这个int数组抛出IndexOutOfRangeException ?
本文关键字:IndexOutOfRangeException 数组 int 为什么 | 更新日期: 2023-09-27 18:11:45
我觉得问这个像个白痴,但我不能为我的生活弄清楚为什么这个IndexOutOfRangeException发生。(我的意思是,我知道为什么它发生了,我只是不知道我的代码是无效的)检查下面的代码,在哪里抛出错误:
public int[, ,] FindTablePairings(System.Text.RegularExpressions.MatchCollection mcBegin, System.Text.RegularExpressions.MatchCollection mcEnd)
{
int[,,] intTablePairs = new int[mcBegin.Count, 1, 1];
int[] intBegin = new int[mcBegin.Count];
int[] intEnd = new int[mcBegin.Count];
for (int q = 0; q < mcBegin.Count; q++)
{
intBegin[q] = mcBegin[q].Index;
}
for (int q = 0; q < mcEnd.Count; q++)
{
intEnd[q] = mcEnd[q].Index;
}
int intBeginCount = mcBegin.Count;
int intEndCount = mcEnd.Count;
int i = 0;
int j = 0;
int k = 0;
while (i < intBeginCount)
{
j = i;
while (j < intEndCount)
{
if (intBegin[i + 1] < intEnd[j])
{
j++;
}
else
{
intTablePairs[i, 0, 0] = intBegin[i];
intTablePairs[i, 1, 0] = intEnd[j];
intEnd[j] = -1; //EXCEPTION OCCURS HERE
break;
}
}
if (j == intEndCount)
{
intTablePairs[i, 0, 0] = intBegin[i];
intTablePairs[i, 1, 0] = intEnd[j - 1];
intEndCount--;
}
while (k < intEndCount)
{
if (intEnd[k] == -1)
{
k++;
}
else
{
intTablePairs[i,0,0] = intBegin[i];
intTablePairs[i,1,0] = intEnd[k];
intEnd[k] = -1;
k=0;
break;
}
}
}
return intTablePairs;
}
代码只是查看开始标记和结束标记出现的字符索引。没什么特别复杂的……但最糟糕的部分是在intEnd[j] = -1;
抛出异常,并且在调试器中,在执行该语句之前,所有数组和MatchCollections都被正确初始化和填充,包括intEnd[]
!我已经进行了调试,以确保数组存在并被初始化,并且我还清理了解决方案并重新构建了它。
有人对这里发生了什么有什么建议吗?
我相信错误实际上在这一行
intTablePairs[i, 1, 0] = intEnd[j];
这里的问题是你在intTablePairs
上定义了最后两个维度的长度都是1。因此,使用索引1是无效的,因为它等于长度。似乎你打算将边界定义为
int[,,] intTablePairs = new int[mcBegin.Count, 2, 2];
看看这个:
int[] intEnd = new int[mcBegin.Count];
将mcBegin替换为mcEnd并试一试
我想intEnd
应该设置为mcEnd.Count
容量。所以不是:
int[] intEnd = new int[mcBegin.Count];
你应该有:
int[] intEnd = new int[mcEnd.Count];
希望能有所帮助。