我有如下代码:
private float[][] data;
...
public int getSizeY() {
return data[0].length;
}
当 data.length == 0
时,它会给我一个 ArrayIndexOutOfBoundsException
。还有其他方法吗?或者我应该在初始化之后再存储它?
你没有x来确定y应该是什么,不过你可以尝试以下方法。
public int getSizeY() {
return data.length < 1 ? 0 : data[0].length;
}
Java中的多维数组不需要第二个维度有固定大小。因此,如果data.length == 0
,就无法确定大小。您必须像其他答案中所示那样专门处理该情况。
例如,这是可能的:
float[][] data = new float[2][];
data[0] = new float[5];
data[1] = new float[9];
Java多维数组是Iliffe向量,这意味着每个维度部分都是独立的比它少一维的数组对象。这赋予了数组形状相当大的灵活性。data[0].length
不需要与data[1].length
或data[n].length
相关联。例如,这里有一个小三角形数组:float[][] data = { new float[1], new float[2], new float[3] };
甚至可以有一些行/列/子数组为空,或者一些子数组彼此是相同的对象。
由于多维数组不局限于简单的长方体或立方体扩展,因此在没有任何特定的子数组长度时询问任何特定子数组的长度就没有明确定义,从而引发错误。成功初始化后像这样 float[][] data = new float[0][y];
,y值不会被保留。如果需要在x为0时保留'y',则必须单独存储它。
在对data[0]
进行任何操作之前,请检查data.length>0
。
更改代码的一种可能的方法是:
public int getSizeY() {
if(data.length>0)
return data[0].length;
return -1; //-1 here is a note to us: oh oh! we have an error
}