- 浏览: 1653478 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- C/C++ (16)
- Linux (60)
- Algorithm (41)
- ACM (8)
- Ruby (39)
- Ruby on Rails (6)
- FP (2)
- Java SE (39)
- Java EE (6)
- Spring (11)
- Hibernate (1)
- Struts (1)
- Ajax (5)
- php (2)
- Data/Web Mining (20)
- Search Engine (19)
- NLP (2)
- Machine Learning (23)
- R (0)
- Database (10)
- Data Structure (6)
- Design Pattern (16)
- Hadoop (2)
- Browser (0)
- Firefox plugin/XPCOM (8)
- Eclise development (5)
- Architecture (1)
- Server (1)
- Cache (6)
- Code Generation (3)
- Open Source Tool (5)
- Develope Tools (5)
- 读书笔记 (7)
- 备忘 (4)
- 情感 (4)
- Others (20)
- python (0)
最新评论
-
532870393:
请问下,这本书是基于Hadoop1还是Hadoop2?
Hadoop in Action简单笔记(一) -
dongbiying:
不懂呀。。
十大常用数据结构 -
bing_it:
...
使用Spring MVC HandlerExceptionResolver处理异常 -
一别梦心:
按照上面的执行,文件确实是更新了,但是还是找不到kernel, ...
virtualbox 4.08安装虚机Ubuntu11.04增强功能失败解决方法 -
dsjt:
楼主spring 什么版本,我的3.1 ,xml中配置 < ...
使用Spring MVC HandlerExceptionResolver处理异常
今天一同学做东西要用这个东东,就帮他写了一个,先转化成后缀表达式,然后再
计算.当然也可以直接计算中缀表达式,考虑到要多位数,就没那么做.
支持多位数的带括号的整数的加减乘除.
22和5在栈的不同层中。
计算.当然也可以直接计算中缀表达式,考虑到要多位数,就没那么做.
支持多位数的带括号的整数的加减乘除.
package edu.jlu.fuliang; import java.util.ArrayList; import java.util.List; import java.util.Stack; public class Eval { public int eval(String exp){ List<String> list = infixExpToPostExp(exp);//转化成后缀表达式 return doEval(list);//真正求值 } //遇到操作符压栈,遇到表达式从后缀表达式中弹出两个数,计算出结果,压入堆栈 private int doEval(List<String> list) { Stack<String> stack = new Stack<String>(); String element; int n1,n2,result; try{ for(int i = 0; i < list.size();i++){ element = list.get(i); if(isOperator(element)){ n1 = Integer.parseInt(stack.pop()); n2 = Integer.parseInt(stack.pop()); result = doOperate(n1,n2,element); stack.push(new Integer(result).toString()); }else{ stack.push(element); } } return Integer.parseInt(stack.pop()); }catch(RuntimeException e){ throw new IllegalExpressionException(e.getMessage()); } } private int doOperate(int n1, int n2, String operator) { if(operator.equals("+")) return n1 + n2; else if(operator.equals("-")) return n1 - n2; else if(operator.equals("*")) return n1 * n2; else return n1 / n2; } private boolean isOperator(String str){ return str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/"); } private List<String> infixExpToPostExp(String exp){//将中缀表达式转化成为后缀表达式 List<String> postExp = new ArrayList<String>();//存放转化的后缀表达式的链表 StringBuffer numBuffer = new StringBuffer();//用来保存一个数的 Stack<Character> opStack = new Stack<Character>();//操作符栈 char ch,preChar; opStack.push('#'); try{ for(int i = 0; i < exp.length();){ ch = exp.charAt(i); switch(ch){ case '+': case '-': case '*': case '/': preChar = opStack.peek(); // 如果栈里面的操作符优先级比当前的大,则把栈中优先级大的都添加到后缀表达式列表中 while(priority(preChar) >= priority(ch)){ postExp.add(""+preChar); opStack.pop(); preChar = opStack.peek(); } opStack.push(ch); i++; break; case '(': // 左括号直接压栈 opStack.push(ch); i++; break; case ')': // 右括号则直接把栈中左括号前面的弹出,并加入后缀表达式链表中 char c = opStack.pop(); while(c != '('){ postExp.add("" + c); c = opStack.pop(); } i++; break; // #号,代表表达式结束,可以直接把操作符栈中剩余的操作符全部弹出,并加入后缀表达式链表中 case '#': char c1; while(!opStack.isEmpty()){ c1 = opStack.pop(); if(c1 != '#') postExp.add("" + c1); } i++; break; //过滤空白符 case ' ': case '\t': i++; break; // 数字则凑成一个整数,加入后缀表达式链表中 default: if(Character.isDigit(ch)){ while(Character.isDigit(ch)){ numBuffer.append(ch); ch = exp.charAt(++i); } postExp.add(numBuffer.toString()); numBuffer = new StringBuffer(); }else{ throw new IllegalExpressionException("illegal operator"); } } } }catch(RuntimeException e){ throw new IllegalExpressionException(e.getMessage()); } return postExp; } private int priority(char op){//定义优先级 switch(op){ case'+': case'-': return 1; case'*': case'/': return 2; case'(': case'#': return 0; } throw new IllegalExpressionException("Illegal operator"); } public static void main(String[] args) { Eval eval = new Eval(); int result = eval.eval("2+3+55*22+21*2+(3+2)*3+4*3+3*4#"); System.out.println(result); } }
package edu.jlu.fuliang; public class IllegalExpressionException extends RuntimeException{ public IllegalExpressionException(){ } public IllegalExpressionException(String info){ super(info); } }
评论
8 楼
wshcdr
2011-11-20
不错,引用了
7 楼
fuliang
2010-06-30
yangguo 写道
多位数怎么会正确呢?
22,5 +
压到栈后变成 225,怎么区分22跟5
22,5 +
压到栈后变成 225,怎么区分22跟5
22和5在栈的不同层中。
6 楼
yangguo
2010-06-12
多位数怎么会正确呢?
22,5 +
压到栈后变成 225,怎么区分22跟5
22,5 +
压到栈后变成 225,怎么区分22跟5
5 楼
wjpiao
2010-02-26
4楼正解,,哈哈,
楼主思路不错啊
楼主思路不错啊
4 楼
zht2006rj
2010-02-03
24行: result = doOperate(n1,n2,element);
改为 result = doOperate(n2,n1,element);
后缀表达式的做操作数先入栈,所以计算时候要交换下顺序,另外可以把数据类型都改为Double或者Float,就更好了.
改为 result = doOperate(n2,n1,element);
后缀表达式的做操作数先入栈,所以计算时候要交换下顺序,另外可以把数据类型都改为Double或者Float,就更好了.
3 楼
jxva
2008-10-17
支持泛点数就比较好了!
2 楼
qwxi_1
2008-03-18
我正在学习Java。看了你的程序,我有很大的收获。谢谢!
1 楼
galaxystar
2008-03-16
恩,不错!
发表评论
-
Builder模式遇到继承
2013-10-13 13:48 0interface Self<T extends ... -
Builder模式遇到集成
2013-10-13 13:47 0package com.qunar.qss.business. ... -
JVM调优Step by Step
2012-02-02 17:38 0现代的JVM能够适应于各种应用和领域,每个应用和领域的使用 ... -
commons-lang StringUtils#split的坑
2011-12-31 10:11 3152今天用StringUtils#split,陷入了前两个坑。需求 ... -
使用scala.sys.process包和系统交互
2011-07-19 00:00 6489在Java中我们可以使用Runtime.getRuntime( ... -
HttpClient Json请求工具
2011-05-05 18:32 17848发送Json请求,结果返回Json. public sta ... -
利用Java反射实现通用的Excel报表
2011-04-12 16:00 2017最近有很多客户报表需要提供客户下载,需要生成一个Excel的格 ... -
深入异常处理
2011-03-31 20:46 1799异常处理是写一个健壮 ... -
Java序列化注意一些点
2011-03-12 21:04 18441.序列化ID的问题: 标示了版本号,版本号一致才能反序列化成 ... -
Java动态代理
2010-09-24 00:34 4458Java提供了动态代理,可以完成AOP和装饰模式的功能,主要的 ... -
Java Timestamp是和ExtJS的timestamp不兼容
2010-08-09 20:33 3351Timestamp纳秒级别的,ExtJS的timestamp使 ... -
XML DocumentBuilder#parse(String str)
2010-07-06 15:55 3885DocumentBuilderFactory dbf = ... -
[备忘]String#split/substring的子串会共享原来大的String
2010-03-29 17:18 1489如果每次需要大字符串中的很小的一个字串,可能会引起内存中大量的 ... -
runtime.exec()执行进程block死锁问题
2010-01-18 21:39 5284最近在java代码中使用runtime.exec执行rsync ... -
URL中文问题
2010-01-08 14:46 10523最近使用HttpClient,和Java的java.net.U ... -
A TaskExecutor Impl
2009-12-07 11:33 1624import java.util.ArrayList; im ... -
使用XStream把Java对象XML/JSON格式的序列化和反序列化
2009-05-05 11:37 6235试了一下Thoughtworks的XStream,以测试驱动和 ... -
从《编程的未来》这篇文章想到C++和Java语言的爽与不爽
2009-05-01 23:44 3967从编程的未来这篇文 ... -
《Effetive Java》读书笔记二
2009-02-23 14:23 1601第二章 所有对象共有的 ... -
《Effetive Java》读书笔记一
2009-02-19 11:36 2180《Effetive Java》和 《Effective C++ ...
相关推荐
然而,如果你提供的压缩包"java实现eval函数"包含的是一个Java项目,那么它很可能是实现了类似功能的自定义解决方案,可能是一个解析器或者编译器,用于处理特定的表达式或脚本语法。这个项目可能包括以下几个部分:...
在Java中,没有直接对应的内置函数可以实现这样的功能,但我们可以构建一个类似的机制来模拟`eval()`的行为。 首先,我们需要理解`eval()`的核心功能:将字符串转换为可执行的代码。在Java中,这可以通过编译和执行...
以下是一个简单的示例,创建一个安全的`eval`替代函数: ```javascript function safeEval(code) { const sandbox = { Math, JSON, // 添加其他安全的全局对象... }; with (sandbox) { try { return new ...
在JavaScript中,`eval()`函数能够将一个字符串作为代码执行,从而实现动态编程。Java中虽然没有直接对应的内置方法,但通过一些技术手段,我们可以模拟实现类似的功能。 1. **Java反射机制**: Java反射API允许...
Java解析公式库`eval.jar`是一个专门为Java开发者设计的开源工具,它允许程序在运行时动态解析和执行数学表达式。这个库的核心功能是提供一个简单、高效的接口,用于处理包含加法(+)、减法(-)、乘法(*)、除法...
这篇博客“利用eval()函数给树节点统一添加单击事件实现新建选项卡功能”探讨了一个具体的JavaScript编程技巧,如何通过eval()函数来处理用户交互,特别是针对树形结构数据的点击事件,进而实现新的选项卡功能。...
本文实例分析了javascript中eval函数用法。分享给大家供大家参考。具体分析如下: eval()只有一个参数,如果传入的参数不是字符串,则直接返回这个参数。否则会将字符串当成js代码进行编译,如果编译失败则...
通过研究这些源代码,开发者可以了解如何实现一个简单的JavaREPL,或者对其进行定制以满足特定需求。 在实际使用JavaREPL时,开发者可以利用它来: - **快速测试代码片段**:比如尝试一个新的API调用,或者验证一...
在JavaScript等脚本语言中,`eval`函数接收一个字符串参数,该字符串被视为可执行的代码,然后解析并执行这个代码。这对于动态创建和执行代码非常有用,比如根据用户输入或外部数据动态生成操作。 在Java中,实现...
以下是一个简单的示例,展示了如何在Ruby中创建一个公共函数文件并接受类作为参数: ```ruby # 公共函数文件,例如命名为lib/utility_module.rb module UtilityModule # 定义一个接受类作为参数的公共函数 def ...
在Java编程语言中,开发一个能够解析和计算数学表达式的工具是常见的需求,"ExprEval.rar"中的"ExprEval_java 计算器"就是这样一个实现。这个程序允许用户输入类似于传统数学作业中的表达式,然后自动进行计算。它...
在提供的压缩文件`ExprEvalSample`中,可能包含了一个简单的表达式评估器的示例代码。这个样本可能展示了一个自定义解析器的实现,包括如何处理运算符优先级、处理括号内的表达式,以及如何处理变量。分析这个代码...
但是,我们可以模拟实现一个类似的函数,来解析并计算简单的数学表达式。以下是一个基于给定内容的简化的Java `Eval` 类实现: ```java import java.util.Stack; public class Eval { private String exp; ...
eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。 需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会...
"js eval 压缩工具"就是这样一个专门针对JavaScript文件进行压缩的工具,其原理是利用`eval`函数来执行经过压缩后的代码。 `eval`函数在JavaScript中是一个非常强大的功能,它可以将字符串作为JavaScript代码来执行...
标题“j4locr_eval”指向的是一个与Java开发相关的技术或库,特别是与图像处理或者文本识别有关,因为“j4locr”通常与OCR(Optical Character Recognition,光学字符识别)技术关联。这个“eval”可能表示这是评估...
以下是一个简单的示例,展示如何使用Nashorn引擎在Java中运行JavaScript代码: ```java import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public ...
利用java进行浮点型大数计算,支持四则运算和指数函数,三角函数,对数函数,双曲函数等运算,精度可调整。例如: MATH a=new MATH("1111.111111111111222222222222*33333333333); MATH b=a.eval("Sin(Pi())...
总的来说,Z.Expressions.Eval 2.4.2 是一个强大且灵活的库,为Java开发者提供了便捷的表达式处理工具,使得在各种项目中实现自定义计算逻辑变得更加简单和高效。通过深入理解和熟练运用,你可以利用它的功能来提升...