我正在尝试用Java制作图形绘图仪。我已完成图形功能,但我必须在源代码中手动插入该功能。我试图获得像x=5*y-2
这样的东西。这就是我想要的代码:
String y = "2*y+1";
int x = y;
drawgraph(x);
如果还不够,我也可以发送源代码。
答案 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