2011-11-27 2 views
2

다른 인수 (예 : y = 2x + a^2-4 * a * x, & a = -15) 등). 간단한 표현식에서는 잘 작동하지만 더 어려운 표현식을 사용하기 시작하면 작동하지 않습니다. 다음 코드는 잘 작동 :왜 jexl calc 산술이 잘못 되었습니까?

JexlEngine jexl = new JexlEngine(); 
Expression func = jexl.createExpression("x1+x2"); 
MapContext mc = new MapContext(); 
mc.set("x1", 2); 
mc.set("x2", 1); 
System.out.println(func.evaluate(mc)); // prints "3" - GOOD ANSWER! 

그러나 이것은 인쇄 오답 : 내가 잘못 할 무엇

JexlEngine jexl = new JexlEngine(); 
Expression func = jexl.createExpression("(x1-2)^4+(x1-2*x2)^2"); 
MapContext mc = new MapContext(); 
mc.set("x1", 2); 
mc.set("x2", 1); 
System.out.println(func.evaluate(mc)); // prints "6" - WRONG ANSWER! 

를?

답변

3

^은 bitwise xor이므로 6이 예상 답변입니다. 자세한 내용은 JEXL syntax을 참조하십시오.

+0

당신 말이 맞아! 고마워! 그럼, 어떻게 JEXL에서 Math.pow()를 구현할 수 있습니까? 아니면 내 용도로 다른 lib를 사용해야합니까? – dizpers

+0

@dizpers JEXL을 사용한 적이 한번도 없으므로 도와 드릴 수 없습니다. 나는 인터넷에서 예제를 찾아 볼 것을 제안한다. 그들 (JEXL 커뮤니티)은 메일 링리스트를 가지고있어 더 많은 답변을 얻을 수 있습니다. –

5

당신은 그런 식으로 뭔가를 할 수 있습니다

Map<String, Object> functions=new HashMap<String, Object>(); 
    // creating namespace for function eg. 'math' will be treated as Math.class 
    functions.put("math",Math.class); 
    JexlEngine jexl = new JexlEngine(); 
    //setting custom functions 
    jexl.setFunctions(functions); 
    // in expression 'pow' is a function name from 'math' wich is Math.class 
    Expression expression = jexl.createExpression("math:pow(2,3)"); 
    expression.evaluate(new MapContext());