package com.aaront.exercise.basic.expr; import java.util.ArrayList; import java.util.List; public class PostfixExpr { String expr = null; public PostfixExpr(String expr) { this.expr = expr; } public float evaluate() { List<String> elements = toList(expr.split(" ")); for (int i = 0; i < elements.size(); i++) { String element = elements.get(i); if (element.equals("+") || element.equals("-") || element.equals("*") || element.equals("/")) { Double result = calc(element, Double.valueOf(elements.get(i - 2)), Double.valueOf(elements.get(i - 1))); elements.add(i - 2, result.toString()); for (int j = 0; j < 3; j++) { elements.remove(i - 1); } i = -1; } } return Float.valueOf(elements.get(0)); } private List<String> toList(String[] elements) { List<String> list = new ArrayList<>(elements.length); for (int i = 0; i < elements.length; i++) { list.add(elements[i]); } return list; } private Double calc(String operator, Double operand1, Double operand2) { switch (operator) { case "+": return operand1 + operand2; case "-": return operand1 - operand2; case "*": return operand1 * operand2; case "/": return operand1 / operand2; default: throw new IllegalArgumentException("不支持的运算符"); } } }