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 ^