所以我有一个方法来获取一堆Integers,并以相同的顺序返回所有元素重复的堆栈。我的问题是我目前使用的方法,我在所有情况下都遇到无限循环问题,除非Stack是空的。如果没有循环问题,我该怎么做才能完成复制?
public void stutter(Stack<Integer> Integ)
{
Integer first;
for(int i = 0; i < Integ.size(); i++)
{
first = Integ.pop();
Integ.push(first);
Integ.push(first);
}
}
答案 0 :(得分:1)
每次推送另一个整数时,都会增加堆栈的原始大小,向前推动“i”限制。
你应该返回一个新的Stack,最好使用(pre java8):
public Stack<Integer> stutter(Stack<Integer> from) {
Stack<Integer> stk = new Stack<>();
for(Integer i: from) {
stk.push(i);
stk.push(i);
}
return stk;
}
答案 1 :(得分:0)
ofc,它是一个无限循环。您将循环内的Integ.size()
增加Integ.push()
。
尝试类似的东西。保存var中的大小,开始将新元素推入其中。
int size = Integ.size();
for(int i = 0; i < size; i++){
first = Integ.pop();
Integ.push(first);
Integ.push(first);
}
答案 2 :(得分:0)
只需创建带有重复项的新堆栈(并在需要时替换旧版本)。