我正在尝试遍历包含随机生成的int值的已排序矢量对象。想法是访问每个元素,输出其值,然后继续下一个元素。
问题是我的迭代仅访问/输出每个其他元素,而不是每个元素。我的代码如下:
//note 'tempRequests' is a vector object containing randomly generated
//int values
int i = 0;
Collections.sort(tempRequests);
System.out.println("request vector is now: ");
System.out.println(tempRequests);
Vector<Integer> requestCopy = new Vector<Integer>();
requestCopy = tempRequests;
//for (int i = currentPosition; i < tempRequests.size()-1; i++)
while (requestCopy.size() > 0)
{
if (requestCopy.contains(tempRequests.get(i)))
{
System.out.println("Processing " + tempRequests.get(i));
requestCopy.removeElement(tempRequests.get(i));
}
if (i+1 <= tempRequests.size()-1)
i++;
else
i = 0;
}
我得到以下具有不同随机生成的int值的输出:
request vector is now:
[172, 548, 568, 632, 698, 779, 886, 950, 1011]
Processing 172
Processing 568
Processing 698
Processing 886
Processing 1011
Processing 548
Processing 779
Processing 632
Processing 950
Vector queue empty, consumer waiting...
我尝试调整for循环,但不太了解为什么只访问其他每个元素。任何帮助或建议,将不胜感激。谢谢。
答案 0 :(得分:2)
此代码不执行您认为的操作:
Vector<Integer> requestCopy = new Vector<Integer>();
requestCopy = tempRequests;
requestCopy = tempRequests
将requestCopy
变量更改为与Vector
变量引用相同 tempRequests
对象,放弃对{{ 1}}对象是在上一行中创建的。
您打算做的是Vector
复制从requestCopy.addAll(tempRequests)
向量到刚刚创建的新向量的元素。
更好的方法是使用复制构造函数:
tempRequests
答案 1 :(得分:2)
由于您要做的只是在Vector上进行迭代并打印出值,而不是创建副本并且必须管理副本中的打印和删除元素,因此请考虑使用Iterator。
Iterator value = tempRequests.iterator();
while(value.hasNext()){
System.out.println("Processing: " + value.next());
}
以上四行将替换创建requestCopy矢量的所有代码以及您拥有的整个while循环。
答案 2 :(得分:1)
我认为您的requestCopy和tempRequests是对一个矢量对象的两个引用。
Vector<Integer> requestCopy = new Vector<Integer>();
这行代码创建了新的vector,然后用引用tempRequests的Object替换了新的Vector Object。您不能以这种方式复制Object。
删除requestCopy = tempRequests;
并将Vector<Integer> requestCopy = new Vector<Integer>();
更新为Vector<Integer> requestCopy = new Vector<Integer>(tempRequests);
然后它将起作用。
希望对您有所帮助。
答案 3 :(得分:-2)
修改您的条件
if (requestCopy.contains(tempRequests.get(i))) {
System.out.println("Processing " + tempRequests.get(i));
requestCopy.removeElement(tempRequests.get(i));
}
到
System.out.println("Processing " + tempRequests.get(i));
if (requestCopy.contains(tempRequests.get(i))) {
requestCopy.removeElement(tempRequests.get(i))
}