逆波兰表示法计算器:两个正数相减返回负数?
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;
在我的反向波兰表示法计算器上执行两个数字的减法时,我得到一个负数结果,例如:
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;