2013-03-12 74 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