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

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

是否命中=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. WPF自定义DataGrid分页控件

    新建Custom Control,名:PagingDataGrid 打开工程下面的Themes\Generic.xaml xaml里面代码替换如下 <Style x:Key="{x:T ...

  2. MyBatis Generator自动生成MyBatis的映射代码

    MyBatis Generator大大简化了MyBatis的数据库的代码编写,有了一个配置文件,就可以直接根据表映射成实体类.Dao类和xml映射.资源地址:MyBatis项目地址:http://my ...

  3. ORACLE 日志 logminer 使用

    1. logminer安装 SQL> @$ORACLE_HOME/rdbms/admin/dbmslm.sql Package created. Grant succeeded. Synonym ...

  4. BZOJ 2423 最长公共子序列

    Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0, ...

  5. 利用低成本的MCU的UART驱动智能卡

    在银行.身份识别和电信市场中,对安全和增强的功能性不断增长的需要,增加了全球范围智能卡的使用.另一方面,这也使得对安全性较低的磁条卡的使用量下降. 然而,所需的基于智能卡系统中,适当的通信系统的硬件和 ...

  6. TControl.WMLButtonUp的inherited的作用——是为了给子类控件新的处理消息的机会

    意外注意到这个小细节: procedure TControl.WMLButtonUp(var Message: TWMLButtonUp); begin inherited; // 注意,如果是直接点 ...

  7. Linux企业级开发技术(6)——libevent企业级开发之内存管理

    默认情况下,libevent使用C库的内存管理函数在堆上分配内存.通过提供malloc.realloc和free的替代函数,可以让libevent使用其他的内存管理器.希望libevent使 用一个更 ...

  8. 字符串(多串后缀自动机):HDU 4436 str2int

    str2int Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...

  9. 动态规划 计数型DP:dobra

    令人愉快的单词(dobra)时间限制: 0.1 秒空间限制: 32 MB [问题描述]Lea 在她的一生中碰到过很多单词.其中的很大一部分都使她不愉快.作为补偿,她开始创造一些愉快的单词. Lea 通 ...

  10. WCF—Binding

    原文地址:http://www.cnblogs.com/jams742003/archive/2010/01/13/1646379.html Binding描述了哪些层面的信息 一个Binding包含 ...