我做错了什么?我要做的是添加到现有的数组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++;
}
}
其他信息:索引超出了数组的范围。
答案 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;