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

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

是否命中=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. php配置虚拟主机的配置步骤(hosts、httpd.conf、vhosts.conf)1.配置本地的dns文件2.配置apache的主配置文件3.配置Apache的虚拟主机

    1.域名解析(DNS) 找到C:\Windows\System32\drivers\etc目录下的hosts文件,在里面进行添加对应的内容

  2. OC之JSON数据解析

    JSON介绍: 作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式 基于JavaScript的一个子集 易读性略差,编码手写难度大,数据量小 JSON格式取代了XML给网络传输带 ...

  3. php 钩子函数原理 解析

    目前对钩子的理解:<转载:http://www.cnblogs.com/del/archive/2008/02/25/1080825.html> 譬如我们用鼠标在某个窗口上双击了一次, 或 ...

  4. PHP 开启 ssh2

    首先,为PHP安装SSH2扩展需要两个软件包, libssh2和ssh2(php pecl拓展). 两者的最新版本分别为libssh2-1.5.0.tar.gz和ssh2-0.12.tgz,下载地址分 ...

  5. 化简复杂逻辑,编写紧凑的if条件语句

    当业务逻辑很复杂,涉及多个条件的真假,或者多种条件下都会执行同一动作时,如何编写紧凑的if语句呢?本文借由一个实际例子,利用数学的布尔逻辑整理条件,最终产生if语句. 问题 在<X3 重聚> ...

  6. Sublime text 2 快捷键配置文件

    分屏快捷键 command+alt+2(就是view菜单中layout后跟数字,有1234,快捷键都带有提示符) 格式化快捷键 ctrl+alt+f 这里提到一个和sublime无关的..comman ...

  7. WSS存储服务器(Windows Storage Server) 2012新功能解析

    虽然最近一段时间有关微软的新闻大多数集中在Windows 8以及Surface平板设备身上,但数周之前Windows Server 2012新版本中所包含的Windows Storage Server ...

  8. POJ-3261-Milk Patterns(后缀数组)

    题意: 给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠. 分析: 先二分答案,然后将后缀分成若干组. 不同的是,这里要判断的是有没有一个组的后缀个数不小于k. 如果有,那么存在k ...

  9. 数据结构(主席树):HDU 4729 An Easy Problem for Elfness

    An Easy Problem for Elfness Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 65535/65535 K (J ...

  10. HDOJ(HDU) 2401 Baskets of Gold Coins(数列、)

    Problem Description You are given N baskets of gold coins. The baskets are numbered from 1 to N. In ...