RPN PostFix计算器输出与预期的简单算术不同

时间:2015-03-18 14:25:35

标签: java calculator rpn

我已经编写了一个类来对基本算术运算符进行后期修复计算 - 代码如下。

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课程可以正常使用,但如果有必要我也可以发布。

我的计算器的输出不符合预期,例如53+的输入评估为392*评估为2,而我期待8分别为1}}和18

1 个答案:

答案 0 :(得分:0)

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

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

由于流行音乐的订购,其中一个运营商会略显棘手。试想一下。