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這個類就能夠了
這裏就不舉例了,你們能夠本身試試