3

我有以下代码:

    public int[] _SpDep = new int[50];
    public int[][] _SpDepCnt = new int[50][];
    public int[][] _SpReadType = new int[50][];

     _DepNo = Convert.ToInt16(strFileName[n].Substring(1, 2));
     _CntNo = Convert.ToInt16(strFileName[n].Substring(6, 2));
     _SpDep[_DepNo] = 1;
     _SpDepCnt[_DepNo][_CntNo] = 1;
     _SpReadType[_DepNo][_CntNo] = 1;

到达此行时出现错误:

      _SpDepCnt[_DepNo][_CntNo] = 1;

但是不知道怎么回事?有什么意见吗?是不是2d array申报错了?

4

5 回答 5

5

锯齿状阵列[][]

如果使用类型的数组int[][]锯齿状数组),您希望像这样初始化数组:

public int[] _SpDep = new int[50];
public int[][] _SpDepCnt = new int[50][];
public int[][] _SpReadType = new int[50][];

然后初始化数组中的数组:

var length = 20;
for (int i = 0; i < length; i++)
{
    _SpDepCnt[i] = new int[length];
     _SpReadType[i] = new int[length];
}

它被称为锯齿状数组,因为第二部分的长度可以变化,例如:

[1,2,3,4]
[5,6]
[7,8,9]

多维数组[,]

我相信您想使用int[,]称为多维数组的类型。他们制作了一个具有两个固定维度的数组。

public int[,] _SpDepCnt = new int[50, 20];
public int[][] _SpReadType = new int[50, 20];

多维数组将为每个索引创建相同大小的数组:

[1,2,3]
[4,5,6]
[7,8,9]
于 2013-04-03T08:12:10.143 回答
3

当您使用 [][] 声明“数组数组”时,您需要初始化外部维度以引用分配的数组,如下所示:

public int[][] _SpReadType = new int[50][];

for (int i = 0; i < 50; ++i)
    _SpReadType[i] = new int[SIZE]; // Where you have to decide on SIZE

[][] 数组也称为“不规则数组”或“锯齿数组”,因为每一行的大小可以不同,因为每一行都是一个单独的数组。

或者,您可以使用以下语法使用实际的二维数组:[,]

例如:

public int[,] _SpReadType = new int[50,SIZE];

然后你像这样访问元素:

int value = _SpReadType[row,col];
于 2013-04-03T08:10:43.930 回答
1

这是一个锯齿状数组,您必须先初始化元素才能使用它

myJaggedArray[0] = new int[5];
myJaggedArray[1] = new int[4];
myJaggedArray[2] = new int[2];

http://msdn.microsoft.com/en-us/library/2s05feca(v=vs.71).aspx

于 2013-04-03T08:10:11.473 回答
1

你尝试的是所谓jagged arrays的,不是multidimensional arrays

如果你想使用二维数组,你可以像这样使用它;

 public int[,] _SpDepCnt = new int[50, 50];
 _SpDepCnt[_DepNo, _CntNo] = 1;

如果你想使用jagged array,你可以像这样使用它;

public int[][] _SpReadType = new int[50][];

for (int i = 0; i < 50; i++)
    _SpReadType[i] = new int[SIZE]; 

锯齿状数组是其元素为数组的数组。锯齿状数组的元素可以具有不同的维度和大小。锯齿状数组有时称为“数组数组”。

于 2013-04-03T08:11:10.760 回答
0

您必须为 2D 阵列保留内存

public int[][] _SpDepCnt = new int[50][];
_SpDepCnt[_DepNo] = new int[50];
_SpDepCnt[_DepNo][_CntNo] = 1;
于 2013-04-03T08:11:27.947 回答