3

JEXLライブラリを使用して、さまざまな引数 (たとえば、y=2x+a^2-4*a*x (x=1&a=3)、(x=5&a=-15) など) を使用して数式を計算します。単純な表現ではうまく機能しますが、より難しい表現を使い始めると、うまくいきません。うまく機能するコードは次のとおりです。

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!

私は何を間違っていますか?

4

2 に答える 2

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());
于 2013-05-20T10:02:19.883 に答える
3

^はビット単位の xor であるため、6 が予想される答えです。詳細については、 JEXL 構文を参照してください。

于 2011-11-27T08:58:25.533 に答える