You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求诊:最近点计算程序中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à

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:32:28