将值与数组中的上一个值求和
本文关键字:上一个 求和 数组 | 更新日期: 2023-09-27 18:25:13
我做错了什么?我试图做的是将linesLat
的值添加到现有数组中,但要在linesLat
中插入的下一个值是从数组中获取上一个值并summ stepLong
。但最终还是出错了。
static void Main(string[] args)
{
var stepLong = (10.6237 - 5.9216) / 1000;
var stepLat = (47.7245 - 45.7368) / 1000;
double[] linesLat = { 45.7368 };
double[] linesLong = { 5.9216 };
for (var i = 1; i <= 999; )
{
linesLat[i] = linesLat[i - 1] + stepLat; // throws an error
i++;
}
}
附加信息:索引超出了数组的界限。
您真的应该回到基础。
数组作为一个有限的大小,它将与您声明的大小完全相同。在您的情况下,您分配了两个大小为1的数组(由于显式初始化)。
double[] linesLat = { 45.7368 }; // Size 1
double[] linesLong = { 5.9216 }; // Size 1
意味着您不能从[0999]循环,当您尝试从位置1获取值时(因为C#数组是从零开始的;第一个元素在0位置,而不是1),您将得到KABOM意味着您将得到一个异常,告诉您您的索引(可能是1)超出了合法的数组界限。
解决方案:您应该按照@i_a_joref的建议,更改解决方案以声明更大的数组。
var linesLat = new double[1000];
linesLat[0] = 45.7368;
此外,可以更正确地编写循环:
for (var i = 1; i < linesLat.Length; i++)
{
linesLat[i] = linesLat[i - 1] + stepLat;
}
问题的可能解决方案变化
如果唯一的目标是得到最后一个公式的和,那么数组是多余的。
double sumOfFormula = 45.7368;
for (var i = 0; i < 1000; i++) // Will run [0, 999] 1000 iterations
{
sumOfFormula += stepLat;
}
Console.WriteLine("Sum: ", sumOfFormula);
您将linesLat
声明为大小为1的数组。如果要在其中放入999+个元素,则需要声明一个更大的数组。
您的数组长度为1,并尝试迭代到999。
你需要用999 的长度来安装你的阵列
double[] linesLat = new double[999];
您的数组大小为1,在for循环中,您试图访问大于数组大小的索引。只需更改:
double[] linesLat = { 45.7368 };
至:
double[] linesLat = new double[1000];
linesLat[0] = 45.7368;