Java 后缀计算器给了我错误的答案

Java 后缀计算器给了我错误的答案,java,calculator,postfix-notation,Java,Calculator,Postfix Notation,我似乎不明白为什么我的后缀计算器得到了错误的答案 我的代码是: public static int calcRPN(String[] postfix) { Stack<Integer> st = new Stack<Integer>(); String value; int ans = 0; for(int i = 0; i < postfix.length; i++){ value = postfix[i];

我似乎不明白为什么我的后缀计算器得到了错误的答案

我的代码是:

public static int calcRPN(String[] postfix)
{
    Stack<Integer> st = new Stack<Integer>();
    String value;
    int ans = 0;

    for(int i = 0; i < postfix.length; i++){
       value = postfix[i];

       if      (value.equals("+")) ans = st.push(st.pop() + st.pop());
       else if (value.equals("-")) ans = st.push(st.pop() - st.pop());
       else if (value.equals("*")) ans = st.push(st.pop() * st.pop());
       else if (value.equals("/")) ans = st.push(st.pop() / st.pop());
       else st.push(Integer.valueOf(value));
    }

    return ans;
}
答案显然应该是一致的。有什么想法吗?

提示1:某些操作(例如
/
-
)没有以下功能:

在数学中,如果改变操作数的顺序不会改变结果,则二进制运算是可交换的

提示2:
push后(a);推(b);x=pop();y=pop
,a、b、x和y是如何关联的?

提示1:某些操作(例如
/
-
)没有以下功能:

在数学中,如果改变操作数的顺序不会改变结果,则二进制运算是可交换的


提示2:
push后(a);推(b);x=pop();y=pop
,a、b、x和y是如何关联的?

ur代码的问题是您颠倒了操作数的顺序。 虽然这对+和*不重要,但对/和-。 见此:

输入堆栈(实际)Ans(实际)堆栈(Ur代码)Ans(Ur代码) 1 1 0 1 0 2 12 0 12 0 -pop()1-2 pop()x2 2-1=1 代码的另一个问题如下所示: 请注意,使用整数堆栈并不保证结果是整数。在某些情况下,由于在进行分区时丢失信息,这可能会给您带来麻烦。另外,您必须将答案推回堆栈,这样堆栈也需要是浮点。 因此,堆栈和应答都需要使用浮点

Ex: 2/3 results to 0 ((2/3)*3) = > 23/3* Input Stack 2 2 3 2 3 / 2 3 / =>ans=0 3 0 3 * 0 3 * =>ans=0 /*Wrong Output*/ 例:2/3的结果为0 ((2/3)*3) = > 23/3* 输入堆栈 2 2 3 2 3 /2 3/=>ans=0 3 0 3 *0 3*=>ans=0 /*错误输出*/
ur代码的问题是您颠倒了操作数的顺序。 虽然这对+和*不重要,但对/和-。 见此:

输入堆栈(实际)Ans(实际)堆栈(Ur代码)Ans(Ur代码) 1 1 0 1 0 2 12 0 12 0 -pop()1-2 pop()x2 2-1=1 代码的另一个问题如下所示: 请注意,使用整数堆栈并不保证结果是整数。在某些情况下,由于在进行分区时丢失信息,这可能会给您带来麻烦。另外,您必须将答案推回堆栈,这样堆栈也需要是浮点。 因此,堆栈和应答都需要使用浮点

Ex: 2/3 results to 0 ((2/3)*3) = > 23/3* Input Stack 2 2 3 2 3 / 2 3 / =>ans=0 3 0 3 * 0 3 * =>ans=0 /*Wrong Output*/ 例:2/3的结果为0 ((2/3)*3) = > 23/3* 输入堆栈 2 2 3 2 3 /2 3/=>ans=0 3 0 3 *0 3*=>ans=0 /*错误输出*/
调试器告诉你什么?调试器告诉你什么?虽然整数除法很好指出,从失败的情况来看,这个赋值的所有输入都是专门生成的,总是可以完全整除的,因此不需要浮点表达式。你说的“使用整数堆栈不能保证结果是整数”到底是什么意思?这正是它所能保证的。@EJP我指的是实际答案,而不是代码所计算的答案。i、 假设e.2/3为0.66,则会给出一个0。,而整数除法很好地指出,从失败的情况来看,这个赋值的所有输入都是专门生成的,总是可以完全整除的,因此不需要浮点表达式。你说的“使用整数堆栈不能保证结果是整数”到底是什么意思?这正是它所能保证的。@EJP我指的是实际答案,而不是代码所计算的答案。i、 e.假设2/3为0.66,则会给出0。。 Ex: 2/3 results to 0 ((2/3)*3) = > 23/3* Input Stack 2 2 3 2 3 / 2 3 / =>ans=0 3 0 3 * 0 3 * =>ans=0 /*Wrong Output*/