从字符串中获取x值

时间:2014-04-13 11:10:34

标签: java string function

我正在尝试用Java制作图形绘图仪。我已完成图形功能,但我必须在源代码中手动插入该功能。我试图获得像x=5*y-2这样的东西。这就是我想要的代码:

String y = "2*y+1";
int x = y;
drawgraph(x);

如果还不够,我也可以发送源代码。

2 个答案:

答案 0 :(得分:1)

如果要为代码动态提供任何函数公式,则需要实现表达式树并针对其参数的不同值对其进行评估。我想你需要自己实现这个。

只需谷歌“表达树java”或“抽象语法树java”,就会出现很多结果。

答案 1 :(得分:0)

一种快速的方法是使用Java的JavaScript引擎。一个例子:

import javax.script.*;

interface GraphFunction {
    double eval(double x);

    public static GraphFunction createFromString(String expression) {
        try {
            ScriptEngine engine = new ScriptEngineManager()
                .getEngineByName("JavaScript");
            engine.eval("function graphFunc(x) { return " + expression + "; }");
            final Invocable inv = (Invocable)engine;
            return new GraphFunction() {
                @Override
                public double eval(double x) {
                    try {
                        return (double)inv.invokeFunction("graphFunc", x);
                    } catch (NoSuchMethodException | ScriptException e) {
                        throw new RuntimeException(e);
                    }
                }
            };
        } catch (ScriptException e) {
            throw new RuntimeException(e);
        }
    }
}

现在,使用它:

class Test {
    public static void main(String[] args) {
        GraphFunction f = GraphFunction.createFromString("2*x+1");

        for (int x = -5; x <= +5; x++) {
            double y = f.eval(x);
            System.out.println(x + " => " + y);
        }
    }
}

输出:

-5 => -9.0
-4 => -7.0
-3 => -5.0
-2 => -3.0
-1 => -1.0
0 => 1.0
1 => 3.0
2 => 5.0
3 => 7.0
4 => 9.0
5 => 11.0