0

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

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,而我分别期待818

4

1 回答 1

0

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

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

由于 pop 的排序,其中一位操作员会稍微棘手一些。考虑一下。

于 2015-03-18T15:46:18.187 回答