逆波兰表示法计算器:两个正数相减返回负数?

Reverse Polish Notation Calc: subtraction of two positive numbers returning a minus?

在我的反向波兰表示法计算器上执行两个数字的减法时,我得到一个负数结果,例如:

20 5 - = -15

然而,我希望看到 15。

谁能看出我的代码哪里出了问题?

   else if (input.equals("-")) {
            int n1 = stack.pop();
            int n2 = stack.pop();
            int result = n1 - n2;

            stack.push((int)result);
        }

堆栈的原则是LIFO(后进先出)。

因此,当您先将 20 压入堆栈,然后将 5 压入堆栈时,第一个 pop 将 return 5 而第二个 pop 将 return 20。因此你计算 5 - 20 而不是 20 - 5.

您应该颠倒操作数的顺序才能进行正确的计算:

else if (input.equals("-")) {
    int n1 = stack.pop();
    int n2 = stack.pop();
    int result = n2 - n1;
    stack.push((int)result);
}

您正在弹出 5,然后 20。也就是说,你需要颠倒减法的顺序:

int result = n2 - n1;