将值汇总到数组

时间:2015-12-01 21:24:51

标签: c# arrays

我做错了什么?我要做的是添加到现有的数组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++;
        }
    }

其他信息:索引超出了数组的范围。

4 个答案:

答案 0 :(得分:4)

您将linesLat声明为大小为1的数组。如果你想在其中加入999个元素,你需要声明一个更大的数组。

答案 1 :(得分:4)

你应该回到基础。

数组作为一个有限的大小,它将是你声明的确切大小。 在您的情况下,您分配了两个大小为1的数组(由于显式初始化)。

double[] linesLat = { 45.7368 }; // Size 1
double[] linesLong = { 5.9216 }; // Size 1

含义你不能从[0,999]循环,当你试图从位置1取值时(因为C#数组是基于零的;第一个元素是在0位置而不是1)你会得到一个 KABOOM 意味着你会得到一个异常告诉你,你的索引(可能是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);

答案 2 :(得分:3)

你的数组的长度为1,你尝试迭代到999。

您需要使用999的长度来实现数组

 double[] linesLat = new double[999];

答案 3 :(得分:3)

您的数组大小为1,在for循环中,您尝试访问的索引大于数组大小。 只需改变:

double[] linesLat = { 45.7368 };

为:

double[] linesLat = new double[1000];
linesLat[0] = 45.7368;