Java长度的子阵列

时间:2013-06-23 10:45:41

标签: java arrays

所以我有以下代码:

private float[][] data;
...
public int getSizeY() {
    return data[0].length;
}

但在ArrayIndexOutOfBoundsException时它会给我data.length == 0。还有其他方法或者我应该在初始化后存储它吗?

4 个答案:

答案 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].lengthdata[n].length相关联。例如,这是一个小的三角形数组:float[][] data = { new float[1], new float[2], new float[3] };你甚至可以有一个数组,其中一些行/列/子数组为空,或者某些子数组是彼此相同的对象。

由于多维数组不限于矩形或长方体的简单扩展,因此当没有任何特定子数组时,询问任何特定子数组的长度并没有明确定义;因此错误。在成功完成初始化float[][] data = new float[0][y];之后,不保留y值。如果你需要在x为0时保持'y',你必须单独存储它。