0

我在这样的 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 的函数的权力?

4

2 回答 2

4

该表达式2^x表示按位异或,而不是取幂。如果您愿意,请使用Math.pow(2,x),但要意识到它对双精度数而不是整数运算,因此会给您一个浮点答案,当您尝试将结果转换为整数时可能会导致异常。

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

或者,如果您想要 2 的幂,而不是任何其他基数,请使用左移表达式:1 << xx 介于 0 和 31 之间。

于 2011-12-04T23:54:39.503 回答
0

最终编辑为:

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

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

看起来不漂亮,但它的工作。

于 2011-12-05T15:08:23.323 回答