如何找到“超出范围”异常的原因?

时间:2012-02-20 01:54:08

标签: c# arrays debugging exception

我正在尝试使用C#在数组中存储十个值。如果我只使用一位数字,一切顺利。但是,每次我给两个或多个数字的数字,我得到一个错误,它超出了数组索引的范围。我怀疑它是分别存储每个数字,例如如果10是我输入的第一个数字,它将在第一个位置存储1,在第二个位置存储0。但是,我不确定。这是问题还是别的什么?我该如何解决这个问题?

(使用Microsoft visual studio 2010 ultimate)

代码:

double[] userValues = new double[10];

for (int i=0; i < userValues.Length; i++) {
    Console.Write("Enter a value: ");
    userValues[i] = Convert.ToDouble(Console.ReadLine());
}

我得到的错误的一个例子:

Enter a value: 10
Enter a value: 10
Enter a value: 10
Enter a value: 10
Enter a value: 10
Enter a value: 10
Enter a value: 10
Enter a value: 10
Enter a value: 10
Enter a value: 10

Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at Assignment1.Program.Main(String[] args) in I:\CS2350\Assignment1\Assignment1\Program.cs:line 21
Press any key to continue . . .

2 个答案:

答案 0 :(得分:1)

异常消息告诉您错误发生在Program.cs的第21行。您需要找到该代码行并进行审核。例如,您可以在Visual Studio中打开该代码文件,按Ctrl-G并在对话框中键入21.

在该行中可能还有另一种数组用法,但该行中索引的值超出了数组范围(小于0或大于9)。找出原因并解决。

希望有所帮助。

答案 1 :(得分:0)

如果您尝试按照自己的意思行事,此代码没有任何问题。循环条件很好。 (int i = 0; i < userValues.Length-1; i++)只会运行9次。这不是你想要做的。当我引用9时它没有进入循环,因为它没有通过条件,因此循环将从i = 0,1,2,3 ... 8运行并且在i迭代时退出i将增加到9因此,不符合循环条件。