解释器模式计算机Demo
已经死掉的代码突然攻击我。
利用解释器模式写出来的(支持乘法~),真的会跑的代码!
真的会跑耶!!!!
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相关推荐
- 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)
一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...
- 第19章 解释器模式(Interpreter Pattern)
原文 第19章 解释器模式(Interpreter Pattern) 解释器模式 导读:解释器模式,平常用的比较的少,所以在写这个模式之前在博客园搜索了一番,看完之后那叫一个头大.篇幅很长,我鼓足了劲 ...
- 自定义语言的实现——解释器模式
本文转载自 :http://blog.csdn.net/lovelion/article/details/7713567 有朋友一直在等待我的解释器模式文稿,,现把某个版本发在博客上,欢迎大家讨论! ...
- 解释器模式(行为模式)
设计模式之Interpreter - 解释器模式 2008-06-24 10:41:46 分类: 项目管理 源地址:http://blog.chinaunix.net/uid- ...
- gof23 设计模式 各个模式代码demo
Gof23 设计模式,也叫Gang of Four(GoF)设计模式,是由四位设计模式大师(Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlisside ...
- 《设计模式之禅》-解释器模式
解释器模式是一种按照规定语法进行解析的方案,在现在的项目中使用比较少 定义 给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子 AbstractExpress ...
- (二十四)解释器模式详解
作者:zuoxiaolong8810(左潇龙),转载请注明出处. 解释器模式是平时工作当中相对冷门的一个设计模式,也非常的难于理解,百度百科上的解释也非常之少,只是简单的介绍了一下,并且说了一句,可以 ...
- 设计模式之美——行为型3:迭代模式、访问者模式、命令模式、解释器模式、中介模式
迭代器模式 迭代器模式的原理和实现 迭代器模式(Iterator Design Pattern),也叫作游标模式(Cursor Design Pattern). 迭代器模式.它用来遍历集合对象.这里说 ...
- Java实现二十三种设计模式(五)—— 十一种行为型模式 (中)——解释器模式、迭代器模式、中介者模式、备忘录模式
Java实现二十三种设计模式(五)-- 十一种行为型模式 (中)--解释器模式.迭代器模式.中介者模式.备忘录模式 一.解释器模式 我国 IT 界历来有一个汉语编程梦,虽然各方对于汉语编程争论不休,甚 ...
最新文章
- AIX系统管理--关于unsuccessful login attempts和account_locked
- 检索图书 FindMess.java
- linux编程能否用于windows,使R包在Windows和Linux中都可以工作
- 第六课:不要为金钱而工作
- RetinaNet和Focal Loss论文笔记
- 自动化运维工具Ansible连续剧之--介绍安装与连接
- vue3 编译很慢_Vue 项目编译时间过长问题
- 利用遗传算法演化一个棋类游戏的人工智能
- docker下载出现异常 dial tcp: lookup ngc.download.nvidia.cn: no such host
- asp.net+sql数据库学生信息管理系统
- 深入理解JVM虚拟机(总结篇)
- 开源项目zheng运行环境
- 如何将OGV格式的视频转换成MP4格式
- Keil5 点击Debug Setting 软件崩溃解决方法
- macOS_Monterey_12.6.1_21G217可引导可虚拟机安装的纯净版苹果OS系统ISO镜像安装包免费下载
- 电脑正常登录QQ微信,但浏览器无法打开网页,这个你一定要学会!
- 【java】方法练习1-商品总价对应折扣
- NGS测序嵌合体是个需要去除的错误扩增序列
- LOL云顶 开心果、阿米、夜猫 通用版新手使用教程
- Js什么是暂时性死区
热门文章
- 如何使用Python实现回文的判断?
- Java 代码 各种不规范示范,希望引以为戒,望看到的大哥们 都能把代码写的规范点,方便你我他。
- 2020海康校招(笔试+2轮面试)复盘
- 苹果开放降级_为什么不开放 iOS 降级验证通道?
- js实现word转换为html
- 英特尔核显驱动hd630_秒速开机快如闪电 英特尔EVO平台惹人爱!
- 腾讯域名申请、腾讯备案以及公安备案过程记录
- HTML播放华为云视频流,华为云点播服务视频管理功能强大,上云就是省心
- 计算机软件授权使用协议,软件许可使用协议
- HTML实例网页代码 (手表商城网站制作) 大学生网页作业源码