我有一个类的分配 - 使用堆栈和队列的后缀评估程序。元素在队列中进入评估方法,并且应该使用堆栈来存储元素;但是,出于某种原因,我无法将最终值推到堆栈上。方法如下:
private String processPostfix(MyQueue postfix)
{
postfix.viewQueue();
MyQueue temp=postfix;
MyStack nums=new MyStack();
String t="";
String final_value="";
int a2;
int a1 = 0;
while(!temp.isEmpty()){
t=(String)postfix.dequeue();
if(t.equals("+") || t.equals("*") || t.equals("-")){
a2=Integer.parseInt(nums.pop().data);
a1=Integer.parseInt(nums.pop().data);
if(t.equals("+")){
t=Integer.toString(a1+a2);
}
else if(t.equals("*")){
t=Integer.toString(a1*a2);
}
else if(t.equals("-")){
t=Integer.toString(a1-a2);
}
}
nums.push(new StackNode(t));
}
final_value=nums.pop().data;
return final_value;
}
如果我使用
,我可以得到正确答案final_value=t;
但问题是继续使用计算器,因为最终值不在堆栈上,任何进一步的输入都无法对其进行处理。因此,我得到一个NullPointerException错误。对此的测试临时解决方案是使用以下代码忽略空堆栈错误:
if(!nums.isEmpty()){
a1=Integer.parseInt(nums.pop().data);
}
我真的很感激对此错误的任何解释。
答案 0 :(得分:0)
你需要在类级别声明堆栈,并且 peek 它,而不是弹出它,以获得最终结果。您的计算器还需要一个C(学习)按钮来清空堆栈。