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

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

是否命中=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. 执行*.sh脚本时提示Permission denied

    使用chmod修改.sh的权限 chmod u+x *.sh 再次执行

  2. Linux nohup命令详解

    nohup命令及其输出文件                                                                                       ...

  3. 面试后 follow up letter 分享

    分享一下最近面试外企的follow up letter. Dear Mr. Xu,     Thank you again for the time you and Mr. Guo spent wit ...

  4. VB.NET中LINQ TO List泛型查询语句(分组,聚合函数)

    Public Class LinqToList 'LINQ在C#中使用比较方便,但是在VB中使用比较麻烦,复杂,和C#用法并不太一样 Dim listNew As List(Of Product) = ...

  5. dedecms模版制作活动的折叠菜单

    需要做成这种样式 url请求为这样: http://m03.com/plus/list.php?tid=19 这些菜单项都有对应的tid项,页面刷新后,应该将所有的菜单折叠起来,对于tid=19的菜单 ...

  6. smarty中判断一个变量是否存在于一个数组中或是否存在于一个字符串中?

    smarty支持php的系统函数可以直接使用{if in_array($str, $arr) || strpos($str, $string)} yes {else} no{/if}

  7. bzoj2260: 商店购物 && 4349: 最小树形图

    Description Grant是一个个体户老板,他经营的小店因为其丰富的优惠方案深受附近居民的青睐,生意红火.小店的优惠方案十分简单有趣.Grant规定:在一次消费过程中,如果您在本店购买了精制油 ...

  8. Unity3d 与IOS 相互调用

    Unity3d 与IOS 相互调用 @灰太龙 群63438968 我用的Unity3d 4.2版本,这一节说一下IOS与U3D的交互! 首先在U3D中写个方法:这个时候导出为ios代码必须是真机,模拟 ...

  9. 除了创建时指定窗口位置之外,还有3种移动窗口位置的办法(移动的同时往往可以改变窗口大小)(SetWindowPos最有用,它有许多标志位)

    首先,在创立窗口对象的时候,CreateWindowEx就可以指定窗口的位置.除此之外,还有三种方法可以改变窗口的位置: procedure TWinControl.CreateWindowHandl ...

  10. 想做Android Wear开发?你得先搞明白这四件事

    手环和手表的腕上穿戴之争,随着Apple Watch发布和Android Wear不断完善而告一段落.尽管续航上略有缺陷,但手表以其类似手机可扩展的生态环境赢得了众多巨头的支持. Google曾透露, ...