- 浏览: 84272 次
- 性别:
- 来自: 合肥
最新评论
-
phlsbg:
HOSTS 中加入ip 主机名 也没有成功
CORB开发中遇到的问题 -
phlsbg:
我也遇到类似的问题,我的环境是客户机win,服务器VM中的Li ...
CORB开发中遇到的问题 -
cary:
<div class="quote_title ...
CORB开发中遇到的问题 -
ziyoo0830:
请教:C:\WINDOWS\system32\drivers\ ...
CORB开发中遇到的问题 -
maofan:
kong
您好!
我在使用installany ...
installAnyWhere 新手小结
下面的逆波兰式,不支持单目运算,以及{}、〔〕这两类的括号运算。对精度提供了设置,根据你输入的浮点数的小数位的位数来适应,返回和操作数相同位数的结果。由于写的匆忙,好存在很多缺陷。不足的地方希望能给出批评。
2.将输入的表达式转换成逆波兰式
3.后序表达式计算
java 代码
- 1.stack.java
- import java.util.LinkedList;
- /**
- * @author
- *
- * @2007-2-8
- * @to-Email
- */
- public class Stack {
- private LinkedList stack = new LinkedList();
- private int top = -1;
- public void push(Object obj)
- {
- top++;
- stack.addFirst(obj);
- }
- public Object pop()
- {
- Object obj = stack.getFirst();
- top--;
- stack.removeFirst();
- return obj;
- }
- public Object top()
- {
- return stack.getFirst();
- }
- public boolean isEmpty()
- {
- if(top == -1 || stack.size() == 0)
- return true;
- else
- return false;
- }
- }
2.将输入的表达式转换成逆波兰式
java 代码
- package structure;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.StringTokenizer;
- /**
- * @author wei
- *
- * @2007-2-8
- * @to-Email
- */
- public class Calculate {
- private List expression = new ArrayList();
- private List operator = new ArrayList();
- private Stack stack;
- public Calculate(String input)
- {
- stack = new Stack();
- StringTokenizer st = new StringTokenizer(input, "+-*/()", true);
- while (st.hasMoreElements()) {
- expression.add(st.nextToken());
- }
- }
- public static boolean isOperator(String operator) {
- if ("+".equals(operator) || "-".equals(operator)
- || "*".equals(operator) || "/".equals(operator)
- || "(".equals(operator) || ")".equals(operator))
- return true;
- else
- return false;
- }
- public List doTrans()
- {
- for(int i = 0;i
- {
- String str = (String)expression.get(i);
- if(str.equals("+") || str.equals("-"))
- {
- gotOper(str,1);
- }else if(str.equals("*") || str.equals("/"))
- {
- gotOper(str,2);
- }else if(str.equals("("))
- {
- stack.push("(");
- }else if(str.equals(")"))
- {
- gotParen(str);
- }else
- {
- operator.add(str);
- }
- }
- while(!stack.isEmpty())
- {
- operator.add(stack.pop());
- }
- return operator;
- }
- public void gotOper(String opThis, int prec1) { // got operator from input
- while (!stack.isEmpty()) {
- String opTop = (String) stack.pop();
- if (opTop.equals("(")) // if it's a '('
- {
- stack.push(opTop); // restore '('
- break;
- } else // it's an operator
- {
- int prec2; // precedence of new op
- if (opTop.equals("+") || opTop.equals("-")) // find new op prec
- prec2 = 1;
- else
- prec2 = 2;
- if (prec2 < prec1) // if prec of new op less
- { // than prec of old
- stack.push(opTop); // save newly-popped op
- break;
- } else
- // prec of new not less
- //output = output + opTop;
- operator.add(opTop);// than prec of old
- } // end else (it's an operator)
- } // end while
- stack.push(opThis); // push new operator
- }
- public void gotParen(String ch) { // got right paren from input
- while (!stack.isEmpty()) {
- String chx = (String)stack.pop();
- if (chx.equals("(")) // if popped '('
- break; // we're done
- else
- // output = output + chx; // output it
- operator.add(chx);
- }
- }
- public static void main(String[] args)
- {
- Calculate calculate = new Calculate("2+(4-3)*2");
- List result = calculate.doTrans();
- for(int i=0;i
- {
- System.out.println(result.get(i));
- }
- }
- }
3.后序表达式计算
java 代码
- package structure;
- import java.math.BigDecimal;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * @author
- *
- * @2007-2-8
- * @to-Email
- */
- public class PostControl {
- private List operator = new ArrayList();
- private Stack stack = new Stack();
- public PostControl(List list)
- {
- operator = list;
- }
- public String doParse()
- {
- BigDecimal z = new BigDecimal("0.00");
- for(int i= 0;i
- {
- String str = (String)operator.get(i);
- if(!isOperator(str))
- { stack.push(str);}
- else
- {
- BigDecimal y = new BigDecimal((String)stack.pop());
- BigDecimal x =new BigDecimal((String)stack.pop());
- if(str.equals("+"))
- {
- z = x.add(y);
- }else if(str.equals("-"))
- {
- z= x.subtract(y);
- }else if(str.equals("*"))
- {
- z = x.multiply(y);
- }else if(str.equals("/"))
- {
- z = x.divide(y);
- }else
- {
- z= new BigDecimal("0.00");
- }
- stack.push(String.valueOf(z));
- }
- }
- return (String)stack.pop();
- }
- public static boolean isOperator(String operator) {
- if ("+".equals(operator) || "-".equals(operator)
- || "*".equals(operator) || "/".equals(operator)
- || "(".equals(operator) || ")".equals(operator))
- return true;
- else
- return false;
- }
- public static void main(String[] args)
- {
- Calculate calculate = new Calculate("2+((4.5-3)*2+3)*2");
- List result = calculate.doTrans();
- PostControl p = new PostControl(result);
- System.out.println(p.doParse());
- }
- }
- code.zip (2.5 KB)
- 下载次数: 22
发表评论
-
SQL SERVER性能优化综述
2008-09-02 14:58 1158近期因工作需要,希望比较全面的总结下SQL SERVER数据库 ... -
SQL Server数据库开发的二十一条军规
2008-09-02 14:56 850如果你正在负责一个基于SQL Server的项目,或者你刚刚接 ... -
关于GC垃圾回收〔网络整理,并非原创〕
2008-04-15 09:36 1957JVM配置参数中文说明: ------------------ ... -
关于RMI的一些知识
2008-04-09 09:19 1290RMI(Remote Method Invocation ... -
IBATIS 常用的调用方法
2007-12-20 10:28 794【1】获得MAP对象 XML中标签的书写,和基本的SELECT ... -
CORB开发中遇到的问题
2007-12-14 22:05 4694(1)问题一 连接服务问题 系统环境: 服务端是在LINUX ... -
NIO 与 QUEUE 的结合
2007-10-01 15:43 2265写了一段时间的NIO通信 ... -
[转载]JAR中调用资源文件
2007-08-08 11:11 2716可能有不少初学者会有 ... -
在网上看到的一些小技术
2007-02-02 14:02 1358都是在网上看到,转载 (1)在web.xml中加一个HttpS ... -
不错的打包工具 fat_jar
2007-01-27 14:20 3598呵呵。一个挺实用的打包工具。基于eclipse 的plugin ... -
怎么利用数字证书完成身份验证、客户和服务器端的加密和解密。
2007-01-24 10:54 14748大家好。我现在在学习数字证书。希望能得到你们的帮助。现在的 ... -
关于事件处理时鼠标状态的说明
2007-01-09 15:42 2826<o:p></o:p> Eclipse ... -
泛型 <T> 详解
2006-12-26 10:44 5344引用。原地址:http://www.java3z.com/c ... -
如何实现RCP与其插件的关系
2006-12-01 13:30 1932在ECLIPSE RCP开发工作中 ... -
JAVA 反射机制
2006-11-29 13:56 1337引用 Java Reflection (JAVA反射) ... -
eclipse 中调用win office
2006-11-20 17:42 1169http://www.java2s.com/Code/Jav ... -
Hibernate Dao
2006-11-17 14:31 1225import java.io.Serializable; ... -
JAVA 中IP地址的获得
2006-11-04 12:07 1347import java.net.*; public clas ... -
RCP的一些细节部分
2006-11-04 11:43 1976ECLIPSE PLUG-IN RCP 此部分有的是自 ... -
java中如何操作BYTE[]
2006-08-21 18:44 2737/** * 加入附件 * @param String pa ...
相关推荐
利用逆波兰式计算表达式,例如 1+3*4 ; (1+5)/6
逆波兰式计算,将格式化数组转化为逆波兰表达式,a为输入的数组,n为其长度,p为输出逆波兰表达式的目标,m记录逆波兰表达式的长度.zip
逆波兰式计算,将格式化数组转化为逆波兰表达式,a为输入的数组,n为其长度,p为输出逆波兰表达式的目标,m记录逆波兰表达式的长度.zip
mfc界面实现,给出一个函数表达式及自变量x的值,计算此多项式的结果。
逆波兰式的翻译和计算。编译原理的实验报告,有利于新手对于逆波兰的基础理解。文件中给出了具体的代码和理解,还有结果截图显示。采用C语言编写,简单易懂。就一个实验报告!!
非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值。 二、实验内容 将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并计算用逆波兰...
主要进行逆波兰式的 读取输入和相关计算,经反复测试后代码可用
本文实例讲述了PHP使用逆波兰式计算工资的方法。分享给大家供大家参考。具体如下: 将一个普通的中序表达式转换为逆波兰表达式的一般算法是: 首先需要分配2个栈,一个作为临时存储运算符的栈S1(含一个结束符号),...
逆波兰式的产生及计算
3.设计出模块结构、测试数据,初步编制好程序 2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好) 3.对学有余力的同学,测试用的表达式事先放在文本
编译原理的中间代码生成阶段的逆波兰式和四元式算法实现,vc++6.0编写,
栈作中介,将表达式转化成逆波兰式,然后计算表达式的值。。支持括号。。允许负数和小数
栈作中介,将表达式转化成逆波兰式,然后计算表达式的值。支持括号。允许负数和小数。
数据结构源代码 char a[]={'+','-','*','/','(',')','#'}; //优先关系矩阵,规定:=为0,>为1,<为-1,空为NO int PriorityTable[7][7]={{ 1, 1,-1,-1,-1, 1, 1}, { 1, 1,-1,-1,-1, 1, 1}, { 1, 1, 1, 1,-1, 1, 1}...
计算器实现了基本的运算功能,可做表达式计算,以逆波兰式运算