克隆和更改堆栈时,我遇到的问题就出现了。 如果我使用ArrayADT或LinkedADT做这件事并不重要。最初的练习声明说我必须实现一些能够克隆给定堆栈和原始堆栈的代码," oldElem"被" newElem"。
取代我最初的想法是采取和Aux Stack,所以我可以简单地复制&替换原始元素的元素(由于按照堆栈反转顺序反转顺序),然后将一个副本再次复制到第二个堆栈中,这样我就能以相同的顺序获得原始堆栈并更改元素。
这是我写的代码:
public <T> BoundedStackADT<T> cloneAndReplaceWith(
BoundedStackADT<T> sourceStack, T oldElem, T newElem) {
BoundedStackADT<T> pila = new BoundedStackADTArrayImpl<T>(sourceStack.size());
BoundedStackADT<T> pilaAux = new BoundedStackADTArrayImpl<T>(sourceStack.size());
T result = null;
T result2 = null;
for (int r=0; r<sourceStack.size();) //I'm pretty sure the problem is here {
try {
result = sourceStack.pop();
} catch (EmptyCollectionException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (result.equals(oldElem))
result = newElem;
pilaAux.push(result);
r++;
}
for (int i = 0; i < sourceStack.size();) {
try {
result2 = pilaAux.pop();
pila.push(result2);
i++;
} catch (EmptyCollectionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return pila;
}
}
我知道T result2不是必需的。
我的问题是,做JUnit测试返回的Stack(pila),它应该是sime大小,因为原始堆栈(sourceStack)永远不会大于2。
我该怎么解决? 非常感谢大家。