0

リストのリストのリストを管理しようとして立ち往生しています。データ構造を次のように宣言および初期化しました。

List<Vector<ArrayDeque<Vector_t>>> mData = new ArrayList<Vector<ArrayDeque<Vector_t>>>(
        6);

for (int i = 0; i < 6; ++i) {
    mData.add(i, new Vector<ArrayDeque<Vector_t>>());
    // mData.get(i).setSize(200);
}

for (int i = 0; i < 6; i++) {
    for (int k = 0; k < 200; k++) {
        mData.get(i).add(new ArrayDeque<Vector_t>());
        mData.get(i).get(k).add(new Vector_t());
    }
}

ここで、Vector_t は次のとおりです。

class Vector_t {
    float x;
    float y;
    float z;
}

この初期化は正しいですか?最後の位置で配列両端キューに値を追加すると、配列両端キュー全体が最後の要素に置き換えられますが、その理由はわかりません。

また、コードを使用して値を変更するとmdata.get(1).get(42)、要素mdata.get(0).get(40)も影響を受けます。繰り返しますが、理由がわかりませんか?

たとえば、ハードコードされた値を指定しました..これは、追加する方法です

if (mData.get(dir.value).get(slice).size() >= sMaxNum_c)
     {
                 mData.get(dir.value).get(slice).removeFirst();
     }
              mData.get(dir.value).get(slice).addLast(result.acc);

一方向に値を追加すると、他の方向の値が変化しています...:(

これを解決するのを手伝ってください。

4

2 に答える 2

0

私の提案は、Amirが提案したようにいくつかのクラスを導入するか、少なくとも名前の付いた一時的なローカル変数を導入してコードを理解しやすくすることです。何を達成しようとしているのかはわかりませんが、いくつかのローカル変数を使用して書き直すと、問題を見つけることができる場合があります。

List<Vector<ArrayDeque<Vector_t>>> mData = new ArrayList<Vector<ArrayDeque<Vector_t>>>(
        6);

for (int i = 0; i < 6; ++i) {
    mData.add(i, new Vector<ArrayDeque<Vector_t>>());
}

for (Vector nextVector : mData) {

    for (int k = 0; k < 200; k++) {
        ArrayDeque<Vector_t> tempArray = new ArrayDeque<Vector_t>());
        tempArray.add(new Vector_t());
        nextVector add(tempArray);
    }
}
于 2013-03-12T03:04:07.123 に答える