二维数组分配:"reference to an object was not set for an instance of the object"



I’m get"未为对象实例设置对对象的引用"运行时错误,建议:"使用new关键字创建对象实例。但我不明白我做错了什么。

这是我的代码:

int numListas = 10;    
x = 15;
int[][] listas;
listas = new int[numListas][];
Random random = new Random(); // generate random number
for (idx = 0; idx < numListas; idx++)
{
 int idx_el;
 for (idx_el = 0; idx_el < x ; idx_el++)
 {
  listas[idx][idx_el] = random.Next(0,100);
 }
}

此行:

int[][] listas;

声明一个变量,该变量是对数组的引用。

此行:

listas = new int[numListas][];

初始化变量以引用numListas数组引用的数组。。。但是每个"子数组"引用一开始都是空的。您需要初始化每个"子数组",可能在您的外循环中:

for (idx = 0; idx < numListas; idx++)
{
    listas[idx] = new int[x];
    ...
}

请注意,另一种选择是使用矩形阵列而不是阵列阵列:

int[,] listas = new int[numListas, x];
...
// In your loop
listas[idx, idx_el] = random.Next(0, 100);

顺便说一句,当您一起声明和初始化变量时,代码通常会读得更清楚,而不是先声明然后再初始化。此外,C#变量名中的下划线并不是很习惯,整个变量名也不是很清楚。我会把你的代码写成:

// Consider declaring these as constants outside the method
int rowCount = 10;
int columnCount = 15;
int[][] values = new int[rowCount];
Random random = new Random();
for (int row = 0; row < rowCount; row++)
{
    values[row] = new int[columnCount];
    for (int column = 0; column < columnCount; column++)
    {
        values[row][column] = random.Next(100);
    }
}

您还应该考虑在方法外部初始化一个Random实例并将其传入——有关更多信息,请参阅我关于Random的文章。

您需要初始化锯齿状数组中的每个内部数组:

int numListas = 10;    
x = 15;
int[][] listas;
listas = new int[numListas][];
Random random = new Random(); // generate random number
for (idx = 0; idx < numListas; idx++)
{
 listas[idx] = new int[x];   // initialize inner array
 int idx_el;
 for (idx_el = 0; idx_el < x ; idx_el++)
 {
  listas[idx][idx_el] = random.Next(0,100);
 }
}

或者,您可以使用二维阵列:

int numListas = 10;    
x = 15;
int[,] listas;
listas = new int[numListas,x];   // 2D array
Random random = new Random(); // generate random number
for (idx = 0; idx < numListas; idx++)
{
 int idx_el;
 for (idx_el = 0; idx_el < x ; idx_el++)
 {
  listas[idx,idx_el] = random.Next(0,100);
 }
}

您没有为第二个维度 listas = new int[numListas][];设置维度。

当你使用x作为循环的极限时,使用它作为维度:

for (idx = 0; idx < numListas; idx++)
{
 int idx_el;
 listas[idx] = new int[x]; // initialize the second dimension
 for (idx_el = 0; idx_el < x ; idx_el++)
 {
  listas[idx][idx_el] = random.Next(0,100);
 }
}

或者,您可以在开始时使用矩形阵列:

int[,] listas = new int[numListas,x];

您忘记初始化数组的第二个维度了吗?

listas = new int[numListas][x];
            initialize this ^   

相关内容

最新更新