C#数组不接受“大小”

时间:2018-02-07 01:51:01

标签: c# arrays loops for-loop indexoutofrangeexception

再次,那个菜鸟。今天的问题是:

int[] forArray = new int[10];
        for (int k = 1; k <= 10; k++)
        {
            forArray[k] = k * 2;
            Console.WriteLine(k); // test
        }
        for (int k = 0; k < 10; k++)
        {
            Console.WriteLine(forArray[k]);
        }

它给出了“越界”错误。我希望我的程序输出2到20之间的自然数。而不是发出错误。当我将第一个for循环条件更改为k <= 9时,它会运行但是给我0而不是20.它就像它将最后一个值返回为0并将其“重新定位”到“前面”。抱歉这个非常简单的问题。

3 个答案:

答案 0 :(得分:1)

当涉及引用元素时,数组是从零开始的。因此,对于数组中的10个项目(这是您分配的内容),它是forArray[0]forArray[9]。您的代码尝试从forArray[1]循环到forArray[10],并且没有索引位置10(这是当您最终超出范围时)。

你的第二个for循环很好,因为它从0变为9。

注意:由于您的循环需要从零开始,因此如果您希望以2开头,则需要调整计算填充到索引位置的数字的方式。

答案 1 :(得分:0)

调试代码并逐步执行,如下所示,您尝试分配到不存在的索引[10]。

{
    int[] forArray = new int[10];

    for (int k = 1; k < 10; k++)  // k < 10 instead of k <= 10
    {
        forArray[k] = k * 2;
        Console.WriteLine(k); // test

            //forArray[0] = SKIPPED
            //forArray[1] = 2
            //forArray[2] = 4
            //forArray[3] = 6
            //forArray[4] = 8
            //forArray[5] = 10
            //forArray[6] = 12
            //forArray[7] = 14
            //forArray[8] = 16
            //forArray[9] = 18
            //forArray[10] INVALID
    }
    for (int k = 0; k < 10; k++)
    {
        Console.WriteLine(forArray[k]);
    }
}

Tested here

答案 2 :(得分:-1)

将您的条件更改为k

forArray [k - 1] = k * 2;