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处理二维数组不效率引起的状况?如果是这样,要怎么样处理动态的二维数组合理,并且能够准确方便的取到其中任何一个元素?
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处理二维数组不效率引起的状况?如果是这样,要怎么样处理动态的二维数组合理,并且能够准确方便的取到其中任何一个元素?
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*此长度...悲剧呀
那么
在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]...
在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全没了
x0=new Vector()