RPN PostFix 计算器输出不符合简单算术的预期

RPN PostFix Calculator output not as expected for simple arithmetic

我写了一个 class 来做 post 修复基本算术运算符的计算 - 代码如下。

public class PostFixCalculatorRPN
{
    public static void main()
    {
        String input = JOptionPane.showInputDialog("PostFix expression: ");
        Stack s = new Stack();

        for (int i = 0; i < input.length(); i++)
        {
            char ch = input.charAt(i);
            if (ch == '+' || ch == '-' || ch == '*' || ch == '/')
            {
                // pop 2 numbers off and operate
                switch (ch)
                {
                case '+':// push the sum of the 2 numbers back on stack
                case '-': // push the difference of the 2 numbers back on stack
                case '*': // push the product of the 2 numbers back on stack    
                case '/':// push the quotient of the 2 numbers back on stack
                }
            } else
                s.push(ch + "");
        }
        int answer = Integer.parseInt((String) s.pop());

        System.out.println(printInput(input) + ": Evaluates to -> " + answer);
        System.exit(0);
    }

    public static String printInput(String s)
    {
        String str = "";

        for (int i = 0; i < s.length(); i++)
            str += s.charAt(i);

        return str;
    }
}

我相信我的 Stack class 可以正常工作,但如果需要,我也可以 post。

我的计算器的输出不符合预期,例如 53+ 的输入计算结果为 3,而 92* 的计算结果为 2,而我期待的是818 分别。

你所拥有的一切都非常接近,但如果你的 case 语句中没有代码,它只会 return 输入字符串中的最后一个非运算符(最后一项压入堆栈)。您是否完全理解您拥有的代码以及堆栈是什么?您正在从左到右步进输入并将数字压入堆栈,直到您点击运算符 (+-*/),然后将运算符应用于您方便地压入堆栈的那些数字。这些数字以您推动它们的相反顺序弹出。您应该只需要从堆栈中弹出两个数字,然后执行所需的操作并推送结果。类似的东西(重用代码中已有的部分):

s.push(Integer.parseInt((String)s.pop()) + Integer.parseInt((String)s.pop()) + "");

由于 pops 的顺序,其中一位操作员会稍微有点棘手。想想看。