Alf*_*rio 18 java equation algebra
我需要一个库来解析方程式,给出输入结果.
例如这样的事情:
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);
Run Code Online (Sandbox Code Playgroud)
并评估为:6
是否有任何类型的java库可以为我做到这一点?
谢谢
Bar*_*ers 28
您可以使用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)));
}
}
Run Code Online (Sandbox Code Playgroud)
产生:
result = 6.0
Run Code Online (Sandbox Code Playgroud)
对于更复杂的表达式,JEP是一个不错的选择.
fas*_*seg 17
还有exp4j,一个基于Dijkstra的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();
Run Code Online (Sandbox Code Playgroud)
玩得开心!