求诊:最近点计算程序中SearchForTheNextDotsTopRight方法报System.IndexOutOfRangeException
解决System.IndexOutOfRangeException异常的问题
嗨,我一眼就看到问题出在哪了——你的SearchForTheNextDotsTopRight()方法里的循环索引越界啦!
问题根源
你的pointsArray是一个长度为sizeOfArray(也就是20)的数组,C#里数组的索引是从0开始的,所以这个数组的有效索引范围是0到19。但你写的循环条件是:
for (int i = 0; i <= sizeOfArray; i++)
当i循环到20的时候,你尝试访问pointsArray[20],这明显超出了数组的有效索引范围,直接触发了IndexOutOfRangeException。
修复方案
把循环条件改成i < sizeOfArray,这样循环只会遍历到索引19,完全在数组的有效范围内:
for (int i = 0; i < sizeOfArray; i++) { if ((pointsArray[i].X == j) && ((pointsArray[i].Y) <= p.Y)) { PointNext = pointsArray[i]; goto endofLoop; } }
额外优化建议
为了避免以后再出现类似的索引问题,你可以考虑用foreach循环来遍历数组,这样就不用手动管理索引了:
private Point SearchForTheNextDotsTopRight(Point p, Point[] pointsArray) { for (int j = p.X; j <= RightBorderX; j++) { foreach (var point in pointsArray) { if (point.X == j && point.Y <= p.Y) { return point; // 找到直接返回,不需要goto } } } // 没找到符合条件的点,返回原点 return p; }
这样代码不仅更简洁,还能避免索引错误,同时去掉了goto语句,让代码逻辑更易读。
内容的提问来源于stack exchange,提问作者Duy Hà
相关产品推荐
相关产品推荐

