我需要一个能够解析方程的库,并给我提供输入的结果。
例如,如下所示:
String equation = "x + y + z";
Map<String, Integer> vars = new HashMap<String, Integer>();
vars.add("x", 2);
vars.add("y", 1),
vars.add("z", 3);
EquationSolver solver = new EquationSolver(equation, vars);
int result = solver.getResult();
System.out.println("result: " + result);并计算为:6
有没有什么java的库可以帮我做到这一点呢?
谢谢
发布于 2011-01-13 23:56:38
您可以利用Java 1.6的脚本功能:
import javax.script.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("x", 2);
vars.put("y", 1);
vars.put("z", 3);
System.out.println("result = "+engine.eval("x + y + z", new SimpleBindings(vars)));
}
}这会产生:
result = 6.0对于更复杂的表达式,JEP是一个很好的选择。
发布于 2011-11-15 16:31:27
还有exp4j,一个基于Dijkstra's Shunting Yard的表达式求值器。它可以在Apache License 2.0下免费获得和重新分发,大小只有25kb,并且非常容易使用。
Calculable calc = new ExpressionBuilder("3 * sin(y) - 2 / (x - 2)")
.withVariable("x", varX)
.withVariable("y", varY)
.build()
double result1=calc.calculate();还有一个在exp4j中使用定制函数的工具。
exp4j - evaluate math expressions
玩得开心!
发布于 2017-04-25 01:58:25
试试mXparser,在下面你会找到用法示例:
import org.mariuszgromada.math.mxparser.*;
...
...
String equation = "x + y + z";
Argument x = new Argument("x = 2");
Argument y = new Argument("y = 1");
Argument z = new Argument("z = 3");
Expression solver = new Expression(equation, x, y, z);
double result1 = solver.calculate();
System.out.println("result 1: " + result1);
x.setArgumentValue(3);
y.setArgumentValue(4);
z.setArgumentValue(5);
double result2 = solver.calculate();
System.out.println("result 2: " + result2);结果:
result 1: 6.0
result 2: 12.0在这里,mXparser的优点是mXparser只预编译表达式一次,然后,在参数值更改后,计算速度非常快。
沿着mXparser tutorial、mXparser math collection、mXparser API行驶。
此外,此软件也使用mXparser,您可以了解Scalar Calculator app的语法。
问候
https://stackoverflow.com/questions/4681959
复制相似问题