我们正在学习中级编程中的堆栈,我们正在使用Practice-IT!用于编码示例。我坚持这一个问题:
“编写一个方法splitStack,它将一堆整数作为参数并将其分为负数和非负数。堆栈中的数字应该重新排列,以便所有负数出现在堆栈的底部和所有非负数换句话说,如果在调用此方法之后,您将从堆栈中弹出数字,您将首先获得所有非负数,然后获得所有负数。无论数字出现在哪个顺序都无关紧要。只要所有负片在堆栈中显得低于所有非负数。您可以使用单个队列作为辅助存储。“
我尝试为它编写一些代码,但它说这是错误的。因为我第一次学习这个,所以我不知道哪里出错了。
public Stack<Integer> splitStack(Stack<Integer> intSt)
{
Stack posSt = new Stack();
Stack negSt = new Stack();
for(int i = 0; i<intSt.size(); i++)
{
intSt.pop();
if (intSt.peek() < 0)
{
negSt.push(intSt);
}
else
{
posSt.push(intSt);
}
}
for(int i = 0; i<negSt.size(); i++)
{
negSt.pop();
intSt.push();
}
for(int i=0; i<posSt.size(); i++)
{
posSt.pop();
intSt.push();
}
return intSt;
}
答案 0 :(得分:1)
代码存在多个问题,所以我要逐一解决它们,但首先,我要谈谈它们的根源:你需要在支持intellisense和调试的IDE上开发代码, java,我最喜欢的是IntelliJ。
有了一个好的IDE,你似乎有:
pop()有一个返回值,因此当你弹出时,你应该存储弹出的值,如int poppedValue = intSt.pop();
push需要一个值,所以如果你想推送刚刚从intSt中弹出的值,你应该使用negSt.push(poppedValue);
(推送poppedValue,而不是intSt)
修复所有推送和弹出后,程序仍然会给出错误的结果,因为弹出堆栈时intSt.size()
会发生变化,所以你的for会在堆栈为空之前退出,因此不会分裂整个堆栈,您可以通过将您的fors改为while(intSt.size() > 0)
最后一个是最难捕捉的,所以我建议你做一些功课,帮助你自己找到所有这些问题:
之后,永远不会想直接在网站上工作,你总是在IDE上开发,然后在完成之后将你的工作复制到其他地方,这真的为你节省了很多时间。