【发布时间】:2015-03-26 09:39:33
【问题描述】:
我在处理图形的应用程序中遇到 ArgumentOutOfRange 异常(索引超出范围。必须为非负数且小于集合的大小。)(但我想弄清楚这并不重要错误在哪里)。
这是我的方法:
public void InverznaFunkcia2(double a, double b, int n, List<Point> F, int m)
{
int i = 0;
double yj = F[0].Y;
double KrokX = (b - a) / n;
double KrokY = (F[0].Y - F[n].Y) / m;
for (int j = 0; j < m - 1; j++)
{
while (yj > F[i + 1].Y)
{
i = i + 1;
if (F[i].Y > 200)
{
break;
}
}
invF.Add(j);
//EXCEPTION THROWN ON THE FOLLOWING LINE:
invF[j] =( a + (j + ((yj - F[i].Y) / (F[i + 1].Y - F[i].Y)) * KrokX));
// invF[j].X = a + (j + ((yj - F[i].Y) / (F[i + 1].Y - F[i].Y)) * KrokX);
yj = yj + KrokY;
pomocneX.Add(j);
double ux = F[i].X -F[i+1].X;
double uy = F[i].Y - F[i+1].Y;
double t = (invF[j] - F[i].Y) / uy;
pomocneX[j] = F[i].X + (t * ux);
//pomocneX[j] = ( a + (j + ((yj - F[i].X) / (F[i + 1].X - F[i].X)) * KrokX));
textBox3.Text += "invF" + j + "\t" + (invF[j] + "\r\n");
textBox4.Text += "X" + j + "\t" + (pomocneX[j] + "\r\n");
}
//invF.Add(m);
// invF[m] = (double)b;
}
我知道这里已经讨论过这种类型的异常,但我不知道如何解决这个问题。谢谢你。
【问题讨论】:
-
你为什么不简单地添加一个断点并与 i 和 j 比较验证 invF 和 F 的大小!
-
IDE 并不总是正确,但您也可以也尝试点击开始 ([F5]),然后查看IDE 在正确的时间用当前值炸毁并捕获异常...
-
在你的第一个while循环中你增加i并检查F[i]是否存在,但在你的错误行中你检查F[i+1]。所以当我恰好是 F 的最后一个元素时,你的代码错误
标签: c# arrays indexoutofboundsexception outofrangeexception