-1

方程式ソルバーのセクションに問題があります。後置式を保持するオブジェクトの配列があり、このメソッドは各値を評価します。

私が抱えている問題は、リストが空であることを教えてクラッシュすることです (この時点で: double num1 = ((double)operandStack.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;
}
4

1 に答える 1

2

以下のコードのコメントを参照してください。エラーが発生する簡単なコードパスがあるようです。

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がコメントで示唆しているように)、これが問題の根本的な原因であるかどうかを特定できます。

于 2012-09-04T10:33:45.423 に答える