我得到“没有为对象实例设置对象的引用”运行时错误,建议:“使用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);
}
}
答案 0 :(得分:1)
您没有为第二维
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];
答案 1 :(得分:1)
这一行:
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
实例并将其传入 - 有关详细信息,请参阅我的article on Random
。
答案 2 :(得分:1)
您需要初始化锯齿状数组中的每个内部数组:
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);
}
}
答案 3 :(得分:0)
您是否忘记初始化数组的第二维?
listas = new int[numListas][x];
initialize this ^