小試表達式解析器 - jeval

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這個類就能夠了

這裏就不舉例了,你們能夠本身試試

相關文章
相關標籤/搜索