我在做作业时面对标题中提到的错误,根本无法找到删除它的方法。以下是我遇到此问题的方法:
public static double LaskeMiidi(double[] luvut)
{
double ka = Keskiarvo(luvut);
double miidi = luvut[0];
for (int i = 0; i < luvut.Length; i++)
{
if (luvut[i] - ka < luvut[i + 1] - ka) // The line error points to!
{
miidi = luvut[i];
}
else
{
miidi = luvut[i + 1];
}
}
return miidi;
}
所以基本上问题是,当我说luvut[i + 1]
时,在某些时候这个索引可能会超过数组的长度。我只是无法找出解决这个问题的方法,因为我只是一个编程初学者。
答案 0 :(得分:2)
是的,这就是问题所在:
for (int i = 0; i < luvut.Length; i++)
{
if (luvut[i] - ka < luvut[i + 1] - ka)
当i
为luvut.Length - 1
时,i + 1
将为luvut.Length
- 因此索引无效。 (对于长度为x
的数组,有效索引为0
到x - 1
,包括在内。)您可能希望更早地结束一次迭代:
for (int i = 0; i < luvut.Length - 1; i++)
那样i + 1
仍然是数组中的有效索引 - 在if
条件和else
子句的主体中。
答案 1 :(得分:0)
提前结束你的循环:
for (int i = 0; i < luvut.Length - 1; i++)
这会阻止循环到达索引无效的位置。
答案 2 :(得分:0)
请注意,在定义数组时,项目范围介于0和array.length-1
之间。所以你应该写:
for (int i = 0; i < luvut.Length-1; i++)
答案 3 :(得分:0)
当i = luvut.Length -1
时,luvut[i + 1]
会发出错误,因为它超出了数组范围。
您需要:
for (int i = 0; i < luvut.Length - 1; i++)
或者在另一个If块中以另一种方式处理luvut[i + 1]
问题。