填充二维数组编译器告诉我,我引用的对象不存在

时间:2018-07-08 17:37:30

标签: c#

当我试图用自己正在构造的对象填充数组时,我不知道为什么它告诉我对象为空。

public int size;
// Use this for initialization
public void Start()
{
    size = 10;
    Unit[,] array = new Unit[size,size];
    int i, j;
    for(i = 1; i<=size; i++)
    {
        for(j=0;j<size;j++)
        {
            if(i>=1&&j>=1)
            {
                array[i, j] = new Unit(array[i - 1, j].getHeight(), array[i, j - 1].getHeight());
            }
            else if(i>=1)
            {
                array[i, j] = new Unit(array[i - 1, j].getHeight(), 0);
            }
            else
            {
                array[i, j] = new Unit(0, 0);
            }
        }
    }
    for (i = 0; i <= size; i++)
    {
        for (j = 0; j <= size; j++)
        {
            Debug.Log(array[i,j].getHeight());
        }
    }
}

我要创建的对象来自构造函数;单位(整数,整数) 它说的是第23行。我假设这意味着该对象在数组中不存在,但是我正在创建对象,所以IDK

1 个答案:

答案 0 :(得分:0)

我看到了两个错误,第一个错误是第一个for循环应该为for(i = 0; i<size; i++),因为c#的基数为0。这将为您提供null对象,因为当您尝试分配

if(i>=1&&j>=1)
{
    array[i, j] = new Unit(array[i - 1, j].getHeight(), array[i, j - 1].getHeight());
}

当i = 1时,array[0,j]从未分配(因为我从1开始),所以它的值为null。

另一个位于最后一组循环中,因为条件应为:

for (i = 0; i < size; i++)
{
    for (j = 0; j < size; j++)
    {
        Debug.Log(array[i,j].getHeight());
    }
}

由于C#的基数为0,因此索引从0size-1