Postfix Evaluator无法推动价值

时间:2018-02-14 04:33:03

标签: java data-structures

我有一个类的分配 - 使用堆栈和队列的后缀评估程序。元素在队列中进入评估方法,并且应该使用堆栈来存储元素;但是,出于某种原因,我无法将最终值推到堆栈上。方法如下:

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);
}

我真的很感激对此错误的任何解释。

1 个答案:

答案 0 :(得分:0)

你需要在类级别声明堆栈,并且 peek 它,而不是弹出它,以获得最终结果。您的计算器还需要一个C(学习)按钮来清空堆栈。