这个包能够为我们提高高效的数学表达式计算。

举个样例:这个是我们策划给出的游戏命中率的一部份计算公式

是否命中=a命中率 – (b等级 – a等级) * (命中系数(6)* b闪避率 / 100)+32

为了好看点,我们把他变成:ahit-(blv-alv)*(6*beva/100)+32

Jeval就是用在这样的情况下的!!!!

Jeval下载地址:http://www.oschina.net/p/jeval 眼下最新版本号是0.9.4 Beta

public class EvalTest {

	private static final double X_VALUE = 1.0;
private static final double Y_VALUE = 270; // testJeval/testJeval2须要手動包裝變量。testJeval3添加了變量包裝方法
public static void main(String[] args) throws Exception {
testJeval();
testJeval2();
testJeval3();
} private static void testJeval() throws Exception {
String exp = "2 + (7-5) * 3.14159 * #{x} + sin(#{y})"; // compile
Evaluator eva = new Evaluator(); eva.putVariable("x", Double.toString(X_VALUE));
eva.putVariable("y", Double.toString(Y_VALUE)); // evaluate
double result = Double.parseDouble(eva.evaluate(exp)); System.out.println(result);//-> 2.0
} public static void testJeval2(){
// 我们的游戏公式 ahit-(blv-alv)*(6*beva/100)+32
String exp = "#{ahit}-(#{blv}-#{alv})*(6*#{beva}/100)+32";
Evaluator eva = new Evaluator();
try {
/** * 加入变量到 Evaluator 类实例. */
eva.putVariable("ahit", "33");
eva.putVariable("blv", "10");
eva.putVariable("alv", "10");
eva.putVariable("beva", "5");
/** * 简单输出变量. */
/*System.out.println(eva.evaluate("#{ahit}"));
System.out.println(eva.evaluate("#{blv}"));
System.out.println(eva.evaluate("#{alv}"));
System.out.println(eva.evaluate("#{beva}"));*/
//公式计算
System.out.println(eva.evaluate(exp));
} catch (Exception e) {
e.printStackTrace();
}
} public static void testJeval3(){
// 我们的游戏公式 ahit-(blv-alv)*(6*beva/100)+32
String exp = "ahit-(blv-alv)*(6*beva/100)+32";
Evaluator eva = new Evaluator();
try {
/** * 加入变量到 Evaluator 类实例. */
eva.putVariable("ahit", "33");
eva.putVariable("blv", "10");
eva.putVariable("alv", "10");
eva.putVariable("beva", "5"); //公式计算
System.out.println(eva.evaluate(formatExpression(exp)));
} catch (Exception e) {
e.printStackTrace();
}
} public static String formatExpression(String exp){
//英文字母變量用#{ }包裝:如變量x,#{x}
String re = "([a-zA-Z]+)";
Pattern pattern = Pattern.compile(re);
Matcher matcher = pattern.matcher(exp);
StringBuffer sb = new StringBuffer();
while(matcher.find()){
matcher.appendReplacement(sb, "#{" + matcher.group(1) + "}");
}
matcher.appendTail(sb);
return sb.toString();
} }

Java数学表示式解析工具- jeval的更多相关文章

  1. java后台常用json解析工具问题小结

    若排版紊乱可查看我的个人博客原文地址 java后台常用json解析工具问题小结 这里不细究造成这些问题的底层原因,只是单纯的描述我碰到的问题及对应的解决方法 jackson将java对象转json字符 ...

  2. 基于Java的简易表达式解析工具(一)

    最近需要用到相关表达式解析的工具,然后去网上搜索,找到了一个用C#写的表达式解析工具,仔细看了功能后发现,这正是我需要的,如果我能将它改造成基于Java语言的方式,岂不是更好吗,所以花了一段时间,把网 ...

  3. 基于Java的简易表达式解析工具(二)

    之前简单的介绍了这个基于Java表达式解析工具,现在把代码分享给大家,希望帮助到有需要的人们,这个分享代码中依赖了一些其他的类,这些类大家可以根据自己的情况进行导入,无非就是写字符串处理工具类,日期处 ...

  4. 你必须掌握的Java基础:JSON解析工具-json-lib

    一.简介  json-lib是一个Java类库,提供将Java对象,包括beans,maps,collections,java arrays和xml等转换成JSON,或者反向转换的功能. 二.准备 在 ...

  5. JSON语言规范与Java中两种解析工具基本使用

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6652250.html  一:JSON语言规范 一言以蔽之:“一个 :一个键值对,一个{}一个对象,一个[]一个 ...

  6. Java爬虫利器HTML解析工具-Jsoup

    Jsoup简介 Java爬虫解析HTML文档的工具有:htmlparser, Jsoup.本文将会详细介绍Jsoup的使用方法,10分钟搞定Java爬虫HTML解析. Jsoup可以直接解析某个URL ...

  7. java 之 xml 之解析工具jaxp

    一.jaxp的api查看 *jaxp是javase一部分 *jaxp解析器在jdk的javax.xml.parsers包里面 *共四个类:分别针对dom和sax解析使用的类 *dom解析类: Docu ...

  8. Java:JSON解析工具-org.json

    一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...

  9. JSON解析工具-org.json使用教程

    转自:http://www.open-open.com/lib/view/open1381566882614.html 一.简介  org.json是Java常用的Json解析工具,主要提供JSONO ...

随机推荐

  1. 【转】 C语言自增自减运算符深入剖析

    转自:http://bbs.csdn.net/topics/330189207 C语言的自增++,自减--运算符对于初学者来说一直都是个难题,甚至很多老手也会产生困惑,最近我在网上看到一个问题:#in ...

  2. underscorejs-shuffle学习

    2.21 shuffle 2.21.1 语法 _.shuffle(list) 2.21.2 说明 返回一个随机乱序的list副本数组, 使用 Fisher-Yates shuffle 来进行随机乱序. ...

  3. 关于浮动float属性和position:absolute属性的区别

    最近返回头看了很多书籍,一直在纠结float属性和absolute绝对定位的区别和使用的情况,给大家分享一下自己的心得和体会吧. 1,float属性 float属性意义是让元素拜托独占一行的霸道总裁, ...

  4. Web控件

    Web控件可分三类 HTML控件 html服务器控件是在HTML控件的基础上,额外增加了一个在当前页面唯一的ID属性值和一个runat = "server" 属性html服务器控件 ...

  5. php实现返回上一页的功能的3种有效方法

    php实现返回上一页的功能的3种有效方法 header(location:你的上一页的路径);   //   注意这个函数前不能有输出 header(location:.getenv("HT ...

  6. YII 小部件实现的注册表

    今天来进行用户注册功能yii集成了很多验证框架,framework/validators下面,这个文件夹的最后一个文件CValidator.php 是总的验证信息,根据请求参数决定需要那种验证 如:u ...

  7. CSS响应式web设计

    参考 1. 响应式web设计之CSS3 Media Queries http://www.cnblogs.com/mofish/archive/2012/05/23/2515218.html 2. 用 ...

  8. block 和delegate的用法

    //block 和delegate的用法 设置代理 #import <UIKit/UIKit.h> typedef void (^ASIHeadersBlock)(NSString *my ...

  9. sql语句中出现笛卡尔乘积

    没有join条件导致笛卡尔乘积 学过线性代数的人都知道,笛卡尔乘积通俗的说,就是两个集合中的每一个成员,都与对方集合中的任意一个成员有关联.可以想象,在SQL查询中,如果对两张表join查询而没有jo ...

  10. ios中关于delegate(委托)的使用心得

    ios中关于delegate(委托)的使用心得 分类: iOS开发2012-05-15 10:54 34793人阅读 评论(9) 收藏 举报 iosuiviewtimerinterfaceprinti ...