已经死掉的代码突然攻击我。
利用解释器模式写出来的(支持乘法~),真的会跑的代码!
真的会跑耶!!!!

import java.util.*;/*** @author advancer* @create 2022-12-14* @Description 解释器计算器*/
public class Calculator {private Expression expression;public Calculator() {}public Calculator(String expStr) {setExpression(expStr);}public void setExpression(String expStr) {final List<String> operatorHigher = Arrays.asList("*", "/");final List<String> operatorLower = Arrays.asList("-", "+");//表达式拆分String[] charArray = expStr.split("");//将数据压入栈Stack<Expression> stack = new Stack<>();for (int i = 0; i < charArray.length; i++) {Expression expression;String element = charArray[i];if (operatorHigher.contains(element)) {expression = stack.pop();switch (element) {case "*":if (!(expression instanceof VarExpression)) {((SymbolExpression) expression).setRight(new MultiplyExpression(((SymbolExpression) expression).getRight(), new VarExpression(charArray[++i])));} else {expression = new MultiplyExpression(expression, new VarExpression(charArray[++i]));}break;case "/":if (!(expression instanceof VarExpression)) {((SymbolExpression) expression).setRight(new DivideExpression(((SymbolExpression) expression).getRight(), new VarExpression(charArray[++i])));} else {expression = new DivideExpression(expression, new VarExpression(charArray[++i]));}break;}} else if (operatorLower.contains(element)) {expression = stack.pop();switch (element) {case "-":expression = new SubtractExpression(expression, new VarExpression(String.valueOf(charArray[++i])));break;case "+":expression = new AddExpression(expression, new VarExpression(String.valueOf(charArray[++i])));break;}} else {expression = new VarExpression(element);}stack.push(expression);}this.expression = stack.pop();}public static void main(String[] args) {Calculator calculator = new Calculator("a+b*c*b*a+a");HashMap<String, Integer> map = new HashMap<>();map.put("a", 1);map.put("b", 2);map.put("c", 3);System.out.println(calculator.expression.interpreter(map));}}abstract class Expression {abstract int interpreter(Map<String, Integer> var);
}class VarExpression extends Expression {private String key;public VarExpression(String key) {this.key = key;}@Overrideint interpreter(Map<String, Integer> var) {return var.get(key);}
}abstract class SymbolExpression extends Expression {protected Expression left;protected Expression right;public Expression getRight() {return this.right;}public void setRight(Expression expression) {this.right = expression;}public SymbolExpression(Expression left, Expression right) {this.left = left;this.right = right;}
}class AddExpression extends SymbolExpression {public AddExpression(Expression left, Expression right) {super(left, right);}@Overrideint interpreter(Map<String, Integer> var) {return left.interpreter(var) + right.interpreter(var);}
}class SubtractExpression extends SymbolExpression {public SubtractExpression(Expression left, Expression right) {super(left, right);}@Overrideint interpreter(Map<String, Integer> var) {return left.interpreter(var) - right.interpreter(var);}
}class MultiplyExpression extends SymbolExpression {public MultiplyExpression(Expression left, Expression right) {super(left, right);}@Overrideint interpreter(Map<String, Integer> var) {return left.interpreter(var) * right.interpreter(var);}
}class DivideExpression extends SymbolExpression {public DivideExpression(Expression left, Expression right) {super(left, right);}@Overrideint interpreter(Map<String, Integer> var) {return left.interpreter(var) / right.interpreter(var);}
}

解释器模式计算机Demo相关推荐

  1. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

  2. 第19章 解释器模式(Interpreter Pattern)

    原文 第19章 解释器模式(Interpreter Pattern) 解释器模式 导读:解释器模式,平常用的比较的少,所以在写这个模式之前在博客园搜索了一番,看完之后那叫一个头大.篇幅很长,我鼓足了劲 ...

  3. 自定义语言的实现——解释器模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/7713567 有朋友一直在等待我的解释器模式文稿,,现把某个版本发在博客上,欢迎大家讨论! ...

  4. 解释器模式(行为模式)

    设计模式之Interpreter - 解释器模式             2008-06-24 10:41:46 分类: 项目管理 源地址:http://blog.chinaunix.net/uid- ...

  5. gof23 设计模式 各个模式代码demo

    Gof23 设计模式,也叫Gang of Four(GoF)设计模式,是由四位设计模式大师(Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlisside ...

  6. 《设计模式之禅》-解释器模式

    解释器模式是一种按照规定语法进行解析的方案,在现在的项目中使用比较少 定义 给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子 AbstractExpress ...

  7. (二十四)解释器模式详解

    作者:zuoxiaolong8810(左潇龙),转载请注明出处. 解释器模式是平时工作当中相对冷门的一个设计模式,也非常的难于理解,百度百科上的解释也非常之少,只是简单的介绍了一下,并且说了一句,可以 ...

  8. 设计模式之美——行为型3:迭代模式、访问者模式、命令模式、解释器模式、中介模式

    迭代器模式 迭代器模式的原理和实现 迭代器模式(Iterator Design Pattern),也叫作游标模式(Cursor Design Pattern). 迭代器模式.它用来遍历集合对象.这里说 ...

  9. Java实现二十三种设计模式(五)—— 十一种行为型模式 (中)——解释器模式、迭代器模式、中介者模式、备忘录模式

    Java实现二十三种设计模式(五)-- 十一种行为型模式 (中)--解释器模式.迭代器模式.中介者模式.备忘录模式 一.解释器模式 我国 IT 界历来有一个汉语编程梦,虽然各方对于汉语编程争论不休,甚 ...

最新文章

  1. AIX系统管理--关于unsuccessful login attempts和account_locked
  2. 检索图书 FindMess.java
  3. linux编程能否用于windows,使R包在Windows和Linux中都可以工作
  4. 第六课:不要为金钱而工作
  5. RetinaNet和Focal Loss论文笔记
  6. 自动化运维工具Ansible连续剧之--介绍安装与连接
  7. vue3 编译很慢_Vue 项目编译时间过长问题
  8. 利用遗传算法演化一个棋类游戏的人工智能
  9. docker下载出现异常 dial tcp: lookup ngc.download.nvidia.cn: no such host
  10. asp.net+sql数据库学生信息管理系统
  11. 深入理解JVM虚拟机(总结篇)
  12. 开源项目zheng运行环境
  13. 如何将OGV格式的视频转换成MP4格式
  14. Keil5 点击Debug Setting 软件崩溃解决方法
  15. macOS_Monterey_12.6.1_21G217可引导可虚拟机安装的纯净版苹果OS系统ISO镜像安装包免费下载
  16. 电脑正常登录QQ微信,但浏览器无法打开网页,这个你一定要学会!
  17. 【java】方法练习1-商品总价对应折扣
  18. NGS测序嵌合体是个需要去除的错误扩增序列
  19. LOL云顶 开心果、阿米、夜猫 通用版新手使用教程
  20. Js什么是暂时性死区

热门文章

  1. 如何使用Python实现回文的判断?
  2. Java 代码 各种不规范示范,希望引以为戒,望看到的大哥们 都能把代码写的规范点,方便你我他。
  3. 2020海康校招(笔试+2轮面试)复盘
  4. 苹果开放降级_为什么不开放 iOS 降级验证通道?
  5. js实现word转换为html
  6. 英特尔核显驱动hd630_秒速开机快如闪电 英特尔EVO平台惹人爱!
  7. 腾讯域名申请、腾讯备案以及公安备案过程记录
  8. HTML播放华为云视频流,华为云点播服务视频管理功能强大,上云就是省心
  9. 计算机软件授权使用协议,软件许可使用协议
  10. HTML实例网页代码 (手表商城网站制作) 大学生网页作业源码