当前位置: 首页 > news >正文

营销型网站建设方案seo顾问培训

营销型网站建设方案,seo顾问培训,c 做网站时字体颜色的代码,网页制作素材代码1、例子 传统方案解决: 1) 编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果 2) 问题分析:如果加入新的运算符,比如 * / ( 等等,不利于扩展,另外让一个方法来…

1、例子

 传统方案解决:

1) 编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果
2) 问题分析:如果加入新的运算符,比如 * / ( 等等,不利于扩展,另外让一个方法来
解析会造成程序结构混乱,不够清晰.
3) 解决方案:可以考虑使用解释器模式, 即: 表达式 -> 解释器(可以有多种) ->
2、基本定义
1) 在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法
单元再通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树。这
里的词法分析器和语法分析器都可以看做是解释器
2) 解释器模式(Interpreter Pattern):是指给定一个语言(表达式),定义它的文法
的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式)
3) 应用场景
应用可以将一个需要解释执行的语言中的句子表示为一个抽象语法树
一些重复出现的问题可以用一种简单的语言来表达
一个简单语法需要解释的场景
4) 这样的例子还有,比如编译器、运算表达式计算、正则表达式、机器人等

 

对原理类图的说明-即(解释器模式的角色及职责)
1) Context: 是环境角色,含有解释器之外的全局信息.
2) AbstractExpression: 抽象表达式, 声明一个抽象的解释操作,这个方法为抽象语法树中所有的节点所
共享
3) TerminalExpression: 为终结符表达式, 实现与文法中的终结符相关的解释操作
4) NonTermialExpression: 为非终结符表达式,为文法中的非终结符实现解释操作.
5) 说明: 输入Context he TerminalExpression 信息通过Client 输入即可
3、代码

 

3、代码

public class AddExpression extends SymbolExpression{public AddExpression(Expression left, Expression right) {super(left, right);}//处理相加//var 仍然是 {a=10,b=20}..//一会我们debug 源码,就okpublic int interpreter(HashMap<String, Integer> var) {//super.left.interpreter(var) : 返回 left 表达式对应的值 a = 10//super.right.interpreter(var): 返回right 表达式对应值 b = 20return super.left.interpreter(var) + super.right.interpreter(var);}
}
public class Calculator {// 定义表达式private Expression expression;// 构造函数传参,并解析public Calculator(String expStr) { // expStr = a+b// 安排运算先后顺序Stack<Expression> stack = new Stack<>();// 表达式拆分成字符数组char[] charArray = expStr.toCharArray();// [a, +, b]Expression left = null;Expression right = null;//遍历我们的字符数组, 即遍历  [a, +, b]//针对不同的情况,做处理for (int i = 0; i < charArray.length; i++) {switch (charArray[i]) {case '+': //left = stack.pop();// 从stack取出left => "a"right = new VarExpression(String.valueOf(charArray[++i]));// 取出右表达式 "b"stack.push(new AddExpression(left, right));// 然后根据得到left 和 right 构建 AddExpresson加入stackbreak;case '-': //left = stack.pop();right = new VarExpression(String.valueOf(charArray[++i]));stack.push(new SubExpression(left, right));break;default://如果是一个 Var 就创建要给 VarExpression 对象,并push到 stackstack.push(new VarExpression(String.valueOf(charArray[i])));break;}}//当遍历完整个 charArray 数组后,stack 就得到最后Expressionthis.expression = stack.pop();}public int run(HashMap<String, Integer> var) {//最后将表达式a+b和 var = {a=10,b=20}//然后传递给expression的interpreter进行解释执行return this.expression.interpreter(var);}
}
public abstract class Expression {// a + b - c// 解释公式和数值, key 就是公式(表达式) 参数[a,b,c], value就是就是具体值// HashMap {a=10, b=20}public abstract int interpreter(HashMap<String, Integer> var);
}
public class SubExpression extends SymbolExpression{public SubExpression(Expression left, Expression right) {super(left, right);}//求出left 和 right 表达式相减后的结果public int interpreter(HashMap<String, Integer> var) {return super.left.interpreter(var) - super.right.interpreter(var);}
}
public class SymbolExpression extends Expression {protected Expression left;protected Expression right;public SymbolExpression(Expression left, Expression right) {this.left = left;this.right = right;}//因为 SymbolExpression 是让其子类来实现,因此 interpreter 是一个默认实现@Overridepublic int interpreter(HashMap<String, Integer> var) {// TODO Auto-generated method stubreturn 0;}
}
public class VarExpression extends Expression {private String key; // key=a,key=b,key=cpublic VarExpression(String key) {this.key = key;}// var 就是{a=10, b=20}// interpreter 根据 变量名称,返回对应值@Overridepublic int interpreter(HashMap<String, Integer> var) {return var.get(this.key);}
}
public class ClientTest {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubString expStr = getExpStr(); // a+bHashMap<String, Integer> var = getValue(expStr);// var {a=10, b=20}Calculator calculator = new Calculator(expStr);System.out.println("运算结果:" + expStr + "=" + calculator.run(var));}// 获得表达式public static String getExpStr() throws IOException {System.out.print("请输入表达式:");return (new BufferedReader(new InputStreamReader(System.in))).readLine();}// 获得值映射public static HashMap<String, Integer> getValue(String expStr) throws IOException {HashMap<String, Integer> map = new HashMap<>();for (char ch : expStr.toCharArray()) {if (ch != '+' && ch != '-') {if (!map.containsKey(String.valueOf(ch))) {System.out.print("请输入" + String.valueOf(ch) + "的值:");String in = (new BufferedReader(new InputStreamReader(System.in))).readLine();map.put(String.valueOf(ch), Integer.valueOf(in));}}}return map;}
}

http://www.lbrq.cn/news/2595907.html

相关文章:

  • 建设银行网站首页口百度推广案例及效果
  • 东莞高端品牌网站建设ue5培训机构哪家强
  • 石家庄便宜网站制作泉州百度广告
  • 全国企业信息查询网站郑州seo方案
  • 地产官网怎么做浙江seo外包费用
  • 英文网站建设方案模板高校有什么好用的搜索引擎
  • 有没有做盗版电影网站犯罪的北京网站优化站优化
  • 张浦专业做网站互联网营销师证书怎么考多少钱
  • 字体 mac wordpress谷歌广告优化
  • 网站开发的学习方法韩国seocaso
  • 中山免费建站赤峰seo
  • 比较好的公司网站zac博客seo
  • 贵阳企业网站制作百度官网入口
  • 电商运营培训课程视频郑州关键词网站优化排名
  • 上海网站设计与制作代运营一家店铺多少钱
  • 顺德网站建设基本流程关于华大18年专注seo服务网站制作应用开发
  • 专业服务网站建设超级优化大师下载
  • 网站后台如何开发河南网站建设定制
  • 政府网站建设程序合肥网站设计
  • 手机版 网站建设广州优化防控措施
  • 黄埔定制型网站建设广州搜索排名优化
  • 十堰企业网站制作公司广州seo代理
  • 微信网站网址seo外包公司哪家好
  • 做美食网站有哪些seo扣费系统源码
  • 网站建设入什么科目凤凰军事新闻最新消息
  • 做微信公众平台的网站吗英文seo推广
  • 南京师范大学课程建设网站什么是网站外链
  • 怎么看一个网站有没有做301爱站工具包怎么使用
  • 桂林网站建设桂林seo是什么牌子
  • 商丘集团网站建设seo是什么专业的课程
  • Web 开发 12
  • python学智能算法(三十一)|SVM-Slater条件理解
  • FreeRTOS源码分析二:task启动(RISCV架构)
  • 【Django】-4- 数据库存储和管理
  • 【Android】通知
  • USB Device(VID_1f3a_PID_efe8) 驱动叹号