为什么我在此代码中收到IndexOutOfRangeException?

时间:2014-11-20 05:54:55

标签: c# .net arrays

我基本上需要将任意数量内容的数组存储到一个整数中,但之后我必须将它全部回显。

我收到indexoutofrange错误。

for (int index = 0; index < userArray; index++, userArray--)
        {
            Console.WriteLine("Number " + userArray + " Value is:");
            userArrayinputed[userArray] = int.Parse(Console.ReadLine());
        }

所有代码:

class Program
{
    static void Main(string[] args)

    {
        Console.WriteLine("What is the Size of the Array?");
        string inputArray = Console.ReadLine();
        int userArray = Convert.ToInt32(inputArray);

        int[] userArrayinputed = new int[userArray];

        for (int index = 0; index < userArray; index++, userArray--)
        {
            Console.WriteLine("Number " + userArray + " Value is:");
            userArrayinputed[userArray] = int.Parse(Console.ReadLine());
        }
        for (int index = userArray; index > 0; index--, userArray--)
        {
            Console.WriteLine(userArrayinputed);
            Console.ReadLine();
        }

正确代码:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("What is the Size of the Array?");
        string inputArray = Console.ReadLine();
        int userArray = Convert.ToInt32(inputArray);
        int maxArray = userArray;

        int[] userArrayinputed = new int[userArray];

        for (int index = 0; index < userArray; index++)
        {
            Console.WriteLine("Number " + index + " Value is:");
            userArrayinputed[index] = int.Parse(Console.ReadLine());
        }
        for (int index = 0; index < userArray; index++)
        {
            Console.WriteLine(userArrayinputed[index]);
            Console.ReadLine();
        }

5 个答案:

答案 0 :(得分:2)

因此,数组基于索引为零,这意味着如果你想要一个10的数组,那么索引器将是0-9

所以当你上升一个数组(0-9)时,你希望当你下行数组时,for循环的顶部为<(小于数组长度) (9-0)您希望下限为>= 0(小于或等于数组的底部),否则您将开始尝试访问10(数组长度)得到OutOfRangeException

例如:

for (int i = 0; i < myArray.Length -1; i++)
{ ... }

for (int i = myArray.Length - 1; i >= 0; i--)
{ ... }

当您在for循环中显示索引时,您将希望显示索引而不是数组长度。

还有一点需要注意 - 你在两个单独的for循环中扣除了userArray变量的值,它在离开循环时没有重置它,所以在方法结束时,{{1变量本来是 - (2 * userArray)而不是我认为你的目标是索引/数组长度。

所以它看起来像这样

userArray

答案 1 :(得分:1)

替换

userArrayinputed[userArray]

userArrayinputed[index]

并从userArray--循环中删除for。请改用索引来显示当前数字:

for (int index = 0; index < userArray; index++)
{
    Console.WriteLine("Number " + index + " Value is:");
    ...

答案 2 :(得分:1)

数组的索引从0开始到(userArray -1)

    string inputArray = Console.ReadLine();
    int userArray = Convert.ToInt32(inputArray);

    int[] userArrayinputed = new int[userArray];

    for (int index = 0; index < userArray; index++)
    {
        Console.WriteLine("Number " + index+ " Value is:");
        userArrayinputed[index] = int.Parse(Console.ReadLine());
    }

    for (int index = 0; index < userArray; index++)
    {
        Console.WriteLine(userArrayinputed[index]);
        Console.ReadLine();
    }

答案 3 :(得分:0)

原因

首先使用userArray == userArrayinputed.Length评估您的for()循环, userArrayinputed[userArray]尝试访问导致IndexOutOfRangeException的数组的第(N + 1)个元素。

数组索引从0开始,还记得吗?所以一个数组,比方说3项

int[] arr = new int[3]

数组包含arr[0]arr[1]arr[2]项,但没有arr[3],这是第4个项。

解决方案

只需使用userArrayinputed[index]并删除userArray--语句中的for()部分即可。 如果您仍想以相反的顺序输入数字,可以从userArray-1算起:

for (int index = userArray - 1; index >= 0; index--)
{
    Console.WriteLine("Number " + index + " Value is:");
    userArrayinputed[index] = int.Parse(Console.ReadLine());
}

要显示数字,您应该WriteLine数组元素,而不是数组:

for (int index = userArray - 1; index >= 0; index--)
{
    Console.WriteLine(userArrayinputed[index]);
    Console.ReadLine();
}

答案 4 :(得分:0)

最初,userArrayinputed [userArray]访问最后一个userarray-1的索引 因为userarray是数组的长度

这是修复,

for (int index = 0; index < userArray; index++, userArray--)
            {
                Console.WriteLine("Number " + userArray + " Value is:");
                userArrayinputed[userArray-1] = int.Parse(Console.ReadLine());
            }