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

问题描述:

我试图用C#在数组中存储十个值。如果我只使用单位数字,一切都会顺利进行。但是,每次给两位或更多位数字时,我都会遇到错误,指出它超出了数组索引的范围。我怀疑它是单独存储每个数字,例如,如果10是我输入的第一个数字,它会在第一个位置存储1,在第二个位置存储0。但是,我不确定。这是问题还是其他问题?我怎样才能解决这个问题?如何找到“超出范围”异常的原因?

(使用Microsoft Visual Studio 2010旗舰版)

代码:

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

该代码适用于我。循环之后还会发生什么其他代码? – 2012-02-20 02:06:46

+5

第21行的代码行是什么? – 2012-02-20 02:10:40

+1

只需在调试器中运行(也许在菜单Debug中启用 - 例外CLR异常)并查看VS2010停止的行。 – Oliver 2012-12-18 15:35:10

有没有错,此代码,如果你正在努力做你说的话。循环条件很好。 (int i = 0; i < userValues.Length-1; i++)只会运行9次。这不是你想要做的。当我引用9时,它不会进入循环,因为它不会通过条件,因此循环将从i = 0,1,2,3 ... 8运行,并且会在第8次迭代时将i递增到9 ,因此不符合循环的条件。

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

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

希望有所帮助。