3

だから私は次のコードを持っています:

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

しかし、それはArrayIndexOutOfBoundsExceptionいつ私に与えますdata.length == 0。別の方法はありますか、それとも初期化後に保存するだけですか?

4

4 に答える 4

11

y がどうあるべきかを決定する x がありません。代わりにこれを行うことができます。

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

Java の多次元配列では、2 番目の次元のサイズを固定する必要はありません。そのため、 の場合、サイズを決定することはできません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 ベクトルです。これは、各次元部分が 1 次元少ない独立した配列オブジェクトであることを意味します。これにより、配列の形状にかなりの柔軟性がもたらされます。、またはdata[0].lengthに関連する必要はありません。たとえば、ここに小さな三角配列があります。一部の行/列/サブ配列が null である配列や、一部のサブ配列が互いに同じオブジェクトである配列を作成することもできます。data[1].lengthdata[n].lengthfloat[][] 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>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
      }
于 2013-06-23T10:52:53.467 に答える