Java 如何让goose bean shell作为数学解析器运行?

Java 如何让goose bean shell作为数学解析器运行?,java,beanshell,Java,Beanshell,我在这样的for循环中使用Bean Shell解释器 for(int i = 0; i <functionSize; i++){ interpreter.set("x", i); yvalues[i] = (Integer) interpreter.eval(functionString); } for(int i=0;i表达式2^x表示按位异或,而不是幂运算。如果您愿意,可以使用,但要知道它是对双精度运算,而不是对int运算,因此当您

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

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

for(int i=0;i表达式
2^x
表示按位异或,而不是幂运算。如果您愿意,可以使用,但要知道它是对双精度运算,而不是对int运算,因此当您尝试将结果强制转换为整数时,将给出一个可能导致异常的浮点答案

编辑:还有,它返回一个BigInteger


或者,如果您想要2的幂,但不需要任何其他基,请使用左移位表达式:
1表达式
2^x
表示按位异或,而不是幂运算。如果您愿意,请使用,但要意识到它是对双精度运算,而不是对整数运算,因此当您尝试转换e结果是一个整数

编辑:还有,它返回一个BigInteger

或者,如果您想要2的幂,而不是任何其他基,请使用左移位表达式:
1结束编辑为:

 double y = Double.parseDouble(interpreter.eval(functionString).toString());
 yvalues[i] = (int) y;
并使用
Math.pow(a,b)
作为输入

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

最后编辑成:

 double y = Double.parseDouble(interpreter.eval(functionString).toString());
 yvalues[i] = (int) y;
并使用
Math.pow(a,b)
作为我的输入


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

难道没有办法让bean shell计算powers吗?那将是最方便的方法,并且会使代码更简单。我不需要单独的powers解析案例。嗯,BeanShell就是Java。Java就是它。如果你想提供一个函数(某个带有方法的类)你自己,并将其分配给你向BeanShell公开的变量,这取决于你。但Java中没有表示求幂的运算符。据我所知,bean shell解释器可以解析数学表达式并对其求值。我用它来避免编写我自己的解析器。所以你是说我应该编写我自己的解析器?BeanShell基本上是Java的解释器。也许你应该考虑使用Jython:Python有**操作符进行求幂,以及内置的bignum支持。当然,对于任何解释器,你都必须注意安全问题。如果你只想计算数学表达式,而不是任意代码,是的,你可能应该编写e你自己的解析器,否则你会暴露自己的安全问题。难道没有办法让bean shell评估powers吗?那将是最方便的方法,并且会使代码更简单。我不需要为解析powers提供单独的案例。嗯,BeanShell就是Java。Java就是它。如果你想提供函数(使用方法的某个类)你自己,并将其分配给你向BeanShell公开的变量,这取决于你。但Java中没有表示求幂的运算符。据我所知,bean shell解释器可以解析数学表达式并对其求值。我用它来避免编写我自己的解析器。所以你是说我应该编写我自己的解析器?BeanShell基本上是Java的解释器。也许你应该考虑使用Jython:Python有**操作符进行求幂,以及内置的bignum支持。当然,对于任何解释器,你都必须注意安全问题。如果你只想计算数学表达式,而不是任意代码,是的,你可能应该编写为您自己的解析器创建一个新的解析器,否则您将面临安全问题。