乐趣区

用堆栈实现后缀表达式的计算

public class PolandExpressionDemo {
    /* 计算逆波兰表达式(后缀表达式)结果
       假设每个数字或者字符之间用空格隔开
       4 * 5 - 8 + 60 + 8 / 2 = 4 5 * 8 - 60 + 8 2 / +
     */
    public double calculatePoland(String exp) {String[] strings = exp.split(" ");
        Stack<Double> stack = new Stack<>();
        for (String s: strings) {
            double n1, n2;
            switch (s) {
                case "*":
                    n1 = stack.pop();
                    n2 = stack.pop();
                    stack.push(n1 * n2);
                    break;
                case "/":
                    n1 = stack.pop();
                    n2 = stack.pop();
                    stack.push(n2 / n1);
                    break;
                case "+":
                    n1 = stack.pop();
                    n2 = stack.pop();
                    stack.push(n1 + n2);
                    break;
                case "-":
                    n1 = stack.pop();
                    n2 = stack.pop();
                    stack.push(n2 - n1);
                    break;
                default:
                    stack.push(Double.parseDouble(s));
                    break;
            }
        }
        return stack.pop();}

    public static void main(String[] args) {PolandExpressionDemo app = new PolandExpressionDemo();
        System.out.println(app.calculatePoland("4 5 * 8 - 60 + 8 2 / +"));
    }
}
退出移动版