我怎样才能将bean shell作为数学解析器运行?

时间:2011-12-04 23:52:02

标签: java beanshell

我在像这样的for循环中使用Bean Shell解释器

    for(int i = 0; i <functionSize; i++){
         interpreter.set("x", i);
         yvalues[i] = (Integer) interpreter.eval(functionString);
    }

我遇到的问题是,当我执行函数2 ^ x时,我得到了非常奇怪的输出。前几个y值的列表如下:2,3,0,1,6,7,4,5,10,11,8,9 ...

有人知道如何让bean shell解释器正确评估权限吗?

编辑:我想使用bean shell解释器代替编写数学解析器。有谁知道如何让bean shell来评估x函数的功效?

2 个答案:

答案 0 :(得分:4)

表达式2^x表示按位异或,而不是取幂。如果你愿意,可以使用Math.pow(2,x),但要意识到它是在双精度而不是整数上运行的,所以会给你一个浮点答案,当你试图将结果转换为整数时,它可能会导致异常。

编辑:还有BigInteger.pow(),它返回一个BigInteger。

或者,如果你想要2的幂,但不是任何其他基数,则使用左移的表达式:1 << x,x在0到31之间。

答案 1 :(得分:0)

结束编辑:

 double y = Double.parseDouble(interpreter.eval(functionString).toString());
 yvalues[i] = (int) y;

使用Math.pow(a, b)作为我的输入。

看起来不漂亮,但它起作用。