3

所以我有以下代码:

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

但它给了我ArrayIndexOutOfBoundsException什么时候data.length == 0。还有其他方法还是应该在初始化后存储它?

4

4 回答 4

11

您没有 x 来确定 y 应该是什么。您可以改为这样做。

public int getSizeY() {
    return data.length < 1 ? 0 : data[0].length;
}
于 2013-06-23T10:47:15.293 回答
3

Java 中的多维数组不需要有固定的第二维大小。因此,如果 ,则无法确定大小data.length == 0。您必须像其他答案中显示的那样专门处理这种情况。

例如这是可能的:

float[][] data = new float[2][];
data[0] = new float[5];
data[1] = new float[9];
于 2013-06-23T10:59:37.900 回答
1

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',则必须单独存储。

于 2013-06-23T11:01:48.967 回答
0

data.length>0data[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
      }
于 2013-06-23T10:52:53.467 回答