代数方程解析器

2022-09-02 05:27:10

我需要一个库来解析一个方程,并给我输入结果。

例如,像这样:

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库可以为我做到这一点?

谢谢


答案 1

您可以利用 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 是一个不错的选择。


答案 2

还有exp4j,一个基于Dijkstra的调车场的表达式计算器。它是在Apache许可证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 - 计算数学表达式

玩得愉快!


推荐