2013-02-05 24 views
1

我試圖添加總結數到的ExpressionBuilder 這是一個自定義功能的Java代碼:de.congrace.exp4j在多個參數失敗的CustomFunction

package com.sapiens.bdms.drools.exe.helper.FuncServiceTrial; 

import com.sapiens.bdms.drools.exe.helper.Functions; 
import de.congrace.exp4j.*; 

import java.util.ArrayList; 
import java.util.Collection; 


public class FormulaInterpreter { 

    public double interpret(String formula) throws UnparsableExpressionException, UnknownFunctionException, InvalidCustomFunctionException { 
     Collection<CustomFunction> customFunctions = new ArrayList<CustomFunction>(); 
     customFunctions.add(new CustomFunction("SUM") { 
      @Override 
      public double applyFunction(double[] doubles) { 
       Double res = 0.0; 
       for (double aDouble : doubles) { 
        res += aDouble; 
       } 
       return res; 
      } 
     }); 
     Calculable calc = (Calculable) new ExpressionBuilder(formula).withCustomFunctions(customFunctions).build(); 
     return calc.calculate(); 
    } 

    public static void main(String[] args) throws UnknownFunctionException, UnparsableExpressionException, InvalidCustomFunctionException { 
     FormulaInterpreter formulaInterpreter = new FormulaInterpreter(); 
     double res = formulaInterpreter.interpret("SUM(2,4,4)"); 
     System.out.println(res); 
    } 
} 

但它打印出「2」 10

+0

請向開頭或結尾的一個問題的問題。 – Freakyuser

回答

0

instad你可以試試這個構造告訴你exp4j功能應該有多少個論點有:

new CustomFunction("SUM",3)

如API文檔中描述:http://www.objecthunter.net/exp4j/apidocs/de/congrace/exp4j/CustomFunction.html

這裏是工作的JUnit測試案例:

@Test 
public void testCustomFunction21() throws Exception { 
    CustomFunction sumFunc = new CustomFunction("SUM",3) { 
     @Override 
     public double applyFunction(double[] doubles) { 
      Double res = 0.0; 
      for (double aDouble : doubles) { 
       res += aDouble; 
      } 
      return res; 
     } 
    }; 
    Calculable calc = (Calculable) new ExpressionBuilder("SUM(2,4,4)").withCustomFunction(sumFunc).build(); 
    assertTrue(10d == calc.calculate()); 
} 

希望這有助於

弗蘭克