for(int i=0;i<=GDX.size()-3;i++){
   for(int j=i+1;j<=GDX.size()-2;j++){
       for(int t=j+1;t<=GDX.size()-1;t++){
           ........
           ........
           ........
           for(int u=0;u<=DDX.size()-1;u++){
                ........
                ........
                x00=.............;
                x0.addElement(x00);
           }
           System.out.println(x0);
           x0.removeAllElements();  
       }
   }
}          
     注:GDX、DDX、x0声明为Vector<Double>,其中存放的数据也都是double型数据,最后打印出来56组x0,每个x0中存放了5个元素。但当我再定义一个X0为Vector< Vector<Double> >用来存放x0时问题出现了,代码如下:
for(int i=0;i<=GDX.size()-3;i++){
   for(int j=i+1;j<=GDX.size()-2;j++){
       for(int t=j+1;t<=GDX.size()-1;t++){
           ........
           ........
           ........
           for(int u=0;u<=DDX.size()-1;u++){
                ........
                ........
                x00=.............;
                x0.addElement(x00);
           }
           X0.addElement(x0);
           x0.removeAllElements();  //加这行是因为我下面还有代码,还要用到x0来存放新的数据别且从index为0开始
       }
   }

System.out.println(X0);
这时候X0打印出来[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]....]
倘若将 x0.removeAllElements(); 这行注释起来,X0打印结果的时候就一直再计算,直到死掉,请高手解答,是不是Vectorc处理二维数组不效率引起的状况?如果是这样,要怎么样处理动态的二维数组合理,并且能够准确方便的取到其中任何一个元素?

解决方案 »

  1.   

    是你写的有问题
    x0是个引用类型,
    你x0.addElement(x00);然后向X0中的index=0位置添加x0,
    然后循环下一次,
    x0.addElement(x00);向X0中的index=1位置添加x0,
    这时index=0位置的x0也又被添加了一次x00
    例子:
    public static void aa(){
    Vector v = new Vector();
    Vector v1 = new Vector();
    for(int i=0;i<3;i++){
    v.add(v1);
    v1.add(1);
    }
    for(int i=0;i<3;i++){
    Vector temp = (Vector)v.get(i);
    for(int j=0;j<temp.size();j++){
    System.out.print(temp.get(j));
    }
    System.out.println();
    }
    }运行结果:
    111
    111
    111
    结论就是,如果你在循环中不x0=new Vector(),那么你循环跑多少次,你的x0就有多长,总元素就是56*此长度...悲剧呀
      

  2.   

    我在u循环中x0添加了5个元素,此时x0为[x00,x00,x00,x00,x00],然后u循环结束,然后向X0中的index=0位置添加x0,此时X0为[[x0]],x0为[],然后进入t循环判断条件,又往下进入u循环,此时x0为[x00,x00,x00,x00,x00],然后u循环结束,然后向X0中的index=1位置添加x0,此时X0为[[x0],[x0]],x0为[],....好像是这样的吧?
      

  3.   

    如果你x0.removeAllElements(); 这行注释起来
    那么
    在u循环中x0添加了5个元素,此时x0为[x00,x00,x00,x00,x00],然后u循环结束,然后向X0中的index=0位置添加x0,此时X0为[[x0]],x0为[x00,x00,x00,x00,x00],然后进入t循环判断条件,又往下进入u循环,此时x0为[x00,x00,x00,x00,x00],然后u循环结束,然后向X0中的index=1位置添加x0,此时X0为[[x0],[x0]],两个x0都为[x00,x00,x00,x00,x00,x00,x00,x00,x00,x00],然后向X0中的index=2位置添加x0,此时X0为[[x0],[x0],[x0]],三个x0都为[x00,x00,x00,x00,x00,x00,x00,x00,x00,x00,x00,x00,x00,x00,x00]...
      

  4.   

    恩,对的,但是不注释x0.removeAllElements();  为什么X0打印出来的结果是[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]....]呢?
      

  5.   

    这道理不是一样的吗
    在u循环中x0添加了5个元素,此时x0为[x00,x00,x00,x00,x00],然后u循环结束,然后向X0中的index=0位置添加x0,此时X0为[[x0]],x0为[x00,x00,x00,x00,x00],然后进入t循环判断条件,又往下进入u循环,此时x0为[],然后u循环结束,然后向X0中的index=1位置添加x0,此时X0为[[x0],[x0]],两个x0都为[],
    因为你这两个x0指向的是同一个Vector啊,这个Vector removeAll,所以两个x0全没了
      

  6.   

    恩,先谢谢。但是不知道该怎么处理才能让X0中打印出来[[x00,x00,x00,x00,x00],[x00,x00,x00,x00,x00],[x00,x00,x00,x00,x00],........]这样的形式,小弟先在拜谢了!
      

  7.   

    每次X0.add(x0)之后
    x0=new Vector()