Java中的方程求解器-未将值推送到堆栈上

Java中的方程求解器-未将值推送到堆栈上,java,Java,我对方程求解器的一部分有问题。我有一个包含后缀方程的对象数组,这个方法计算每个值 我遇到的问题是,它崩溃了,告诉我列表此时为空:double num1=doubleoperanstack.pop 有人能告诉我我做错了什么吗 DSAQueue<Object> postfixQueue = new DSAQueue<Object>(); . . . . private double evaluatePostfix (Queue<Object> post

我对方程求解器的一部分有问题。我有一个包含后缀方程的对象数组,这个方法计算每个值

我遇到的问题是,它崩溃了,告诉我列表此时为空:double num1=doubleoperanstack.pop

有人能告诉我我做错了什么吗

    DSAQueue<Object> postfixQueue = new DSAQueue<Object>();
.
.
.
.


private double evaluatePostfix (Queue<Object> postfixQueue)
{

DSAStack<Double> operandStack = new Stack<Double>();
while (postfixQueue.isEmpty() == false)
    {
    if (postfixQueue.peek() instanceof Double)
        {
        operandStack.push((Double)(postfixQueue.dequeue()));
        }
    else
        {
        double num1 = ((double)operandStack.pop());
        double num2 = ((double)operandStack.pop());
        char operator = ((char)postfixQueue.dequeue());
        double result = executeOperation (operator, num1, num2);
        operandStack.push(result);
        }
    }
double solution = operandStack.top();
return solution;
}

请参阅下面代码中的注释。似乎存在导致错误的琐碎代码路径:

DSAQueue<Object> postfixQueue = new DSAQueue<Object>();

private double evaluatePostfix (Queue<Object> postfixQueue)
{

  // Here you define an empty list
  DSAStack<Double> operandStack = new Stack<Double>();

  while (postfixQueue.isEmpty() == false)
  {
    if (postfixQueue.peek() instanceof Double)
    {
      operandStack.push((Double)(postfixQueue.dequeue()));
    }
    else
    {
      // If the first item in postfixQueue was not a Double, you're now
      // pop-ing from an empty stack
      double num1 = ((double)operandStack.pop());
      double num2 = ((double)operandStack.pop());
      char operator = ((char)postfixQueue.dequeue());
      double result = executeOperation (operator, num1, num2);
      operandStack.push(result);
    }
  }
  double solution = operandStack.top();
  return solution;
}

如果按照Peter在评论中的建议使用调试器,您可以确定这是否是问题的根本原因。

您使用了哪些参数测试了该方法?我猜调用该参数时堆栈是空的。您是否尝试过在调试器中单步执行代码?是否尝试过调试它?在第一次迭代中检查postfixQueue的内容,我打赌问题出在第一个元素类型中,它不是Double的实例,然后你陷入了操作数为空的else情况。这是一个方程计算器,不是方程求解器。谢谢。理论上,postfixQueue中的第一个项目将是双倍的,我想我在组合postfixQueue时犯了一个错误。除非您的DSAQueue类提供了一个闪亮的toString方法,否则最简单的方法可能是遍历队列并为每个对象打印toString。请注意,如果我的答案解决了您原来的问题,那么您当然应该在彻底研究之后,将任何其他问题作为单独的问题发布。