20

方程式を解析して、入力を与える結果を得ることができるライブラリが必要です。

たとえば、次のようなものです。

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用のライブラリはありますか?

ありがとう

4

5 に答える 5

29

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-01-13T15:56:37.500 に答える
18

Dijkstra の Shunting Yard に基づく式評価器であるexp4jもあります。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 - 数式を評価する

楽しんで!

于 2011-11-15T08:31:27.183 に答える