jeval是为你的Java应用程序提供可加入的、高性能、数学、 布尔和函数表达式的解析和运算的高级资源包。java
下载地址:http://www.oschina.net/p/jeval 目前最新版本是0.9.4 Betadom
这个包能够为咱们提升高效的数学表达式计算。函数
举个例子:这个是咱们策划给出的游戏命中率的一部份计算公式性能
是否命中=a命中率 - (b等级 - a等级) * (命中系数(6)* b闪避率 / 100)+32测试
为了好象点,咱们把他变成:ahit-(blv-alv)*(6*beva/100)+32 lua
在日常咱们看到这些都头痛,通常的处理方法是把非变量排除出来,想办法变成 常量+变量的形式
但这种式形的结果就是调整不方便,也加大了维护难度.spa
一般策划给出的每个常量都是有意义的,改变一个常量就能够调整整个系统的命中率和其它相连数据。.net
也就是说常量可能会常常调整.游戏
Jeval就是用在这种状况下的!!!!资源
接下来咱们先看看jeval没有变量的例子
/**
* 测试jeval代码
*
* @author eric http://www.javagg.com
*/
public class JevalTest {
public static void main(String[] args) {
// System.out.println(System.currentTimeMillis());
Evaluator eva= new Evaluator();
try {
System.out.println(eva.evaluate("2+8/2"));
} catch (EvaluationException e) {
e.printStackTrace();
}
}
}
运行,输出结果为
6.0
是否是好简单呢。
接下来看看有变量的,咱们就用游戏命中率公式这个例子
/**
* 测试jeval代码
*
* @author eric http://www.javagg.com
*/
public class JevalTest {
public static void main(String[] args) {
// 咱们的游戏公式 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("#{ahit}-(#{blv}-#{alv})*(6*#{beva}/100)+32"));
} catch (EvaluationException e) {
e.printStackTrace();
}
}
}
输出:
33.0
10.0
10.0
5.0
65.0
到这里你已会使用jeval的基本功能了
别外jeval也能够作字符串的相加如:
System.out.println(eva.evaluate("'A' + 'C'"));
输出:AC
jeval本身也附带十多个数学函数,如:
System.out.println(eva.evaluate("round(3)"));//3的随机数
System.out.println(eva.evaluate("abs(-1)"));//绝对值
还有abs ,acos ,asin ,atan ,atan2 ,ceil ,cos ,exp ,floor ,log ,max ,min ,pow ,random ,rint ,round ,sin ,sqrt ,tan
若是不够用,还能够本身添加函数只要implements Function这个类就能够了
这里就不举例了,你们能够本身试试