stackoverflow上有一个类似标题的问题here https://stackoverflow.com/questions/41283897/how-to-convert-string-into-math-function-just-once,但我想问是否可以在Java中做类似的事情。
我想做一些类似于 desmos 的东西,就像那家伙在 Javascript 中所做的那样,但我想使用 lwjgl 2 在 Java 中制作它。我是 Java 新手,我想知道是否可以将一段转换为字符串到方法中。是否可以?
我寻找了可能的选择,我发现你可以制作自己的 Javaeval()
方法。但我不想更换x
在窗口宽度的每个像素的字符串中。
提前致谢。
您需要的是一个可以计算表达式的引擎/库,在执行时定义为字符串。如果您将评估代码包装到函数调用中(例如 lambda 函数),您将得到您所需要的。
选项1:您可以使用exp4j http://www.objecthunter.net/exp4j/. exp4j是一个占用空间很小的库,能够在执行时评估表达式和函数。这是一个例子:
Expression e = new ExpressionBuilder("3 * sin(y) - 2 / (x - 2)")
.variables("x", "y")
.build()
.setVariable("x", 2.3)
.setVariable("y", 3.14);
double result = e.evaluate();
选项2:您可以使用Java的脚本引擎 https://docs.oracle.com/javase/8/docs/api/javax/script/ScriptEngine.html。您可以使用它来计算定义的表达式,例如在 JavaScript 中:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("sin(1.25)");
选项 3:编译为本机 Java。通过这种方法,您可以使用模板生成 .java 文件,其中包含包含表达式的类。比你调用Java编译器。这种方法的缺点是实现上有一定的复杂性,并且有一些初始延迟(直到类被编译),但性能是最好的。以下是一些可供探索的链接:
- 使用 javax.tools 创建动态应用程序 http://www.ibm.com/developerworks/java/library/j-jcomp/
- 尤其javax.tools.编译器 http://docs.oracle.com/javase/6/docs/api/javax/tools/JavaCompiler.html
注意事项无论您选择哪种方法,请记住您需要考虑安全性。允许用户输入可以在没有安全限制的情况下进行评估的代码可能非常危险。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)