所以我有以下代码:
private float[][] data;
...
public int getSizeY() {
return data[0].length;
}
但在ArrayIndexOutOfBoundsException
时它会给我data.length == 0
。还有其他方法或者我应该在初始化后存储它吗?
答案 0 :(得分:11)
你没有x来确定y应该是什么。你可以这样做。
public int getSizeY() {
return data.length < 1 ? 0 : data[0].length;
}
答案 1 :(得分:3)
Java中的多维数组不需要具有第二维的固定大小。
因此,如果data.length == 0
,则无法确定大小。你必须特别像处理其他答案一样处理这种情况。
例如,这是可能的:
float[][] data = new float[2][];
data[0] = new float[5];
data[1] = new float[9];
答案 2 :(得分:2)
在使用data.length>0
执行任何操作之前,请先检查data[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
}
答案 3 :(得分:1)
Java多维数组是Iliffe vectors,这意味着每个维度部分是一个维度较少的独立数组对象。这为阵列形状提供了相当大的灵活性。 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',你必须单独存储它。