1

私はbandsという名前のこの3次元配列を持っています。私はそれを4つコピーする必要があるので、それらすべてと並行して作業することができます。

int bands[][][] = new int[param][][];

配列は3次元配列であり続ける必要があります。これは、いくつかのメソッドの入力であり、int [][][]

どうすればそのようなコピーを作成できますか?私は次のようなarrayListの使用を考えていました:

List<Integer[][][]> bandsList = new ArrayList<Integer[][][]>();

bandsList.add(bands);

しかし、最後の行でこのエラーが発生します:add(Integer[][][])型のメソッドList<Integer[][][]>は引数に適用できません(int[][][])

だから私は何をすべきですか?

4

2 に答える 2

1

エラーは、int[][][]がと同じではないためですInteger[][][]

int[][][]プリミティブの3D配列です int

Integer[][][]オブジェクトの3D配列で Integerあり、のラッパークラスですint

技術的には、3D配列は、2D配列へのポインタの配列です。これは、プリミティブの配列またはオブジェクトへのポインタである1D配列へのポインタの配列です。

List<int[][][]> bandsList = new ArrayList<int[][][]>();代わりに使用してください。

また、注意してください

bandsList.add(bands);
bandsList.add(bands);

同じ配列に2つのポインタを追加するだけで、一方を変更するともう一方も変更されます。

それらを手動でコピーする必要があります。

int[][][] getCopy(int[][][] bands)
{
  int[][][] newBands = new int[bands.length][][];
  for (int i = 0; i < bands.length; i++)
  {
    newBands[i] = new int[bands[i].length];
    for (int j = 0; j < bands[i].length; j++)
    {
      newBands[i][j] = new int[bands[i][j].length];
      System.arraycopy(bands, 0, newBands, 0, bands[i][j].length))
    }
  }
  return newBands;
}

// to add
bandsList.add(getCopy(bands));
于 2013-02-17T14:58:07.527 に答える
0

このように、アレイのコピーを実行しているのではなく、これを4回実行する必要があります。

    int cloneList[][][] = new int[param][..][..];
    for(int i = 0; i<bands.length; i++) {
       int arr1[][] = bands[i];
       for(int j = 0; j<arr1.length; j++) {
           int arr2[] = arr1[j];
           for(int k = 0; k<arr2.length; k++) {
               int x = arr2[k];
               cloneList[i][j][k] = x;
           }
       }
    }
于 2013-02-17T15:06:42.203 に答える