2013-03-12 71 views
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; 
} 

這是初始化是否正確?在最後一個位置向數組deque添加值時,它會將整個arraydeque替換爲最後一個元素,我不知道爲什麼。

此外,當我使用代碼mdata.get(1).get(42)更改值時,mdata.get(0).get(40)上的元素也受到影響。再次,我不知道爲什麼?

我給硬編碼值example..this是IM添加

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); 
提升價值,以一個方向的其他方向的值時,正在改變

... :(

請幫我的方式解決這個問題

+0

對不起,在第一行類名是Vector_t ...鍵入錯誤...執行我的那個...! – user2159091 2013-03-12 02:43:40

+1

你知道你可以編輯你的文章,對吧? – DaoWen 2013-03-12 02:47:54

+0

爲什麼不介紹一些類來封裝你正在做的而不是這個!? – 2013-03-12 02:51:30

回答

0

我的建議是要麼引入一些類作爲Amir的建議,要麼通過引入一些有名的臨時局部變量來讓您的代碼更易於理解 我不知道你在做什麼Ť rying到acheive,但隨着使用一些局部變量的重新編寫,也許能夠發現一個問題:

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); 
    } 
} 
0

我不知道你正在努力實現的是什麼,但對於初學者來說,你應該考慮使用因爲它已經過時了,所以除Vector外還有另一個數據結構。

import java.util.ArrayDeque; 
import java.util.ArrayList; 
import java.util.List; 
// Consider using another DataStructure such as Arraylist, as Vector<> is obsolete. 
import java.util.Vector; 

public class main { 

    public static void main(String[] args) { 

     // Use diamond inference. 
     List<Vector<ArrayDeque<Vector_t>>> mData = new ArrayList<>(6); 

      for (int i = 0; i < 6; i++) { 
       Vector<ArrayDeque<Vector_t>> vav = new Vector<>(); 
       ArrayDeque<Vector_t> av = new ArrayDeque<>(); 

       for (int k = 0; k < 200; k++) { 
        av.add(new Vector_t(2.0f, 2.0f, 2.0f)); 
       } 

       vav.add(av); 
      } 
     } 
    } 

使用變量而不是調用get()這麼多。

public class Vector_t { 
private float x; 
private float y; 
private float z; 

public Vector_t() { 
    x = 0.0f; 
    y = 0.0f; 
    z = 0.0f; 
} 

public Vector_t(float x, float y, float z) { 
    this.x = x; 
    this.y = y; 
    this.z = z; 
} 

public float GetX() { 
    return x; 
} 

public float GetY() { 
    return y; 
} 

public float GetZ() { 
    return z; 
} 

public void SetX(float x) { 
    this.x = x; 
} 

public void SetY(float y) { 
    this.y = y; 
} 

public void SetZ(float z) { 
    this.z = z; 
} 

}

使用getter和setter方法的類,它是所有關於使用面向對象的編程概念:)

如果你試圖完成什麼更具體一點,我當然我們可以幫忙。

-Francisco

+0

我想建立和應用程序獲取傳感器數據的所有方向。 Vector_t類是針對每個方向上的x y z值的。因此,問題是值也不正確地存儲在數組中,正如我所提到的那樣,並且當我獲取一個方向上的值時,其他方向值會影響這個方向值。 – user2159091 2013-03-12 03:25:39

+0

從什麼時候開始Java的Vector變得過時了?我剛剛檢查了Java 7,它並沒有過時。 – 2013-03-12 03:32:50