package com.cheng.zenofdesignpatterns.patterns.interpreter.calculator; import android.webkit.HttpAuthHandler; import java.util.HashMap; import java.util.Stack; /** * 计算器 */ public class Calculator { // 定义的表达式 private Expression expression; // 构造函数传参,并解析 public Calculator(String expStr) { // 定义一个堆栈,安排运算的先后顺序 Stack<Expression> stack = new Stack<>(); // 表达式拆分为字符数组 char[] charArray = expStr.toCharArray(); // 运算 Expression left = null; Expression right = null; for (int i=0,len=charArray.length; i < len; i++) { switch (charArray[i]) { case '+' : // 加法 // 加法结果放到堆栈中 left = stack.pop(); right = new VarExpression(String.valueOf(charArray[++i])); stack.push(new AddExpression(left, right)); break; case '-' : // 减法 left = stack.pop(); right = new VarExpression(String.valueOf(charArray[++i])); stack.push(new SubExpression(left, right)); break; default: // 公式中的变量 stack.push(new VarExpression(String.valueOf(charArray[i]))); } } // 把运算结果抛出来 this.expression = stack.pop(); } // 开始运算 public int run(HashMap<String, Integer> var) { return this.expression.interpreter(var); } }