我们必须打印此向量的指定索引,但我们无法使用正确的索引。
创建SetA
后,所有元素都对应于最后一次插入,而不是指定的索引。
有没有办法在预先存在的向量的末尾添加Vector
?
这样,“添加”功能不起作用!
Vector <Vector <Integer>> setA = new Vector<Vector <Integer>>();
Vector <Integer> temp = new Vector<Integer>();
for(int i=0; i<=2;i++){
temp.clear();
for(int j=0; j<=4;j++){
temp.add(i*j);
}
setA.add(temp);
System.out.printf("\nVector Temp: "+temp.toString());
System.out.printf("\nElement i="+i+" of setA: "+setA.get(i).toString()+"\n");
}
System.out.printf("\nNow I want to print the vector that correspond index i=1 of set");
System.out.printf("\n"+setA.get(1).toString()+"\n\n");
}
答案 0 :(得分:1)
问题是,你试图一次又一次地重复使用相同的Temp:
for(int i=0; i<=2;i++){
temp.clear();
for(int j=0; j<=4;j++){
temp.add(i*j);
}
setA.add(temp);
所以当你开始时,你清除temp,添加四个元素并添加对vector setA的相同引用。现在当你循环下一次,即i = 1时,你从temp中删除所有元素,所以现在你的setA将在i = 0的位置包含一个空向量;
为避免这种情况,您应该使用:
for(int i=0; i<=2;i++){
temp = new Vector<Integer>();//initialize every time. Do you really need Vector or list will work?
for(int j=0; j<=4;j++){
temp.add(i*j);
}
setA.add(temp);//do you really need vector within vector?
答案 1 :(得分:1)
每次循环都会向temp添加相同的引用。您希望每次都声明一个新实例。
for (int i = 0; i <= 2; i++) {
Vector <Integer> temp = new Vector<Integer>();
...
}
此外,你应该使用List / ArrayList,因为Vector是遗留的。