我在像这样的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函数的功效?
答案 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)
作为我的输入。
看起来不漂亮,但它起作用。