将值与数组中的上一个值求和

本文关键字:上一个 求和 数组 | 更新日期: 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;