4

有没有办法创建如下函数?

我需要计算三角形的面积,我不记得计算这个的正确公式,而且我没有互联网或其他信息来源。我记得的是,这种函数的参数是一些边b和高度h。所以我想创建一些看起来像这样的函数:

public static void calculate(String forgottenFunc, int... params) {/*implementation*/};

我想到了基于 Java 的 JavaScript eval 函数来实现,而无需使用 RegExp。我一直坚持将字符串(forgottenFunc)转换为一些真正的函数,这些函数将使用给定的参数来计算我需要的东西。或者 Python 的 eval 或其他一些功能的任何替代方案。谢谢

4

4 回答 4

1

试试Jep,一个免费的 Java 数学解析器。

于 2012-04-22T21:49:04.317 回答
1

mXparser将满足您的需求 :-) 请按照以下示例进行操作:

import org.mariuszgromada.math.mxparser.*;
...
...
public static double calculate(String forgottenFunc, double... params) {
    Function f = new Function(forgottenFunc);
    return f.calculate(params);
}
...
...
System.out.println( calculate("p(a,h) = a*h/2", 2, 3) );

结果:

3.0

请遵循mXparser 教程

Additionally - this software is using mXparser as well - you can learn the syntax Scalar Calculator app

Best regards

于 2017-04-17T11:03:25.673 回答
0

根据您的评论,我看到您想要一个解析器,而不是一个闭包。

JavaScript eval 函数没有内置的等效函数。它被认为是邪恶的。

您可以使用 zovegames 建议的第三方解析器,也可以使用javacc等构建自己的解析器

于 2012-04-22T22:43:21.347 回答
0

对于一般解决方案:您可以在程序中嵌入MVEL,将公式作为字符串传递,绑定参数并对其进行评估。从链接页面:

MVEL 是一种用于基于 Java 的应用程序的强大表达语言。它提供了大量功能,适用于从最小的属性绑定和提取到完整脚本的所有内容。

于 2012-04-23T00:11:55.790 回答