作者:晓亮居士_264 | 来源:互联网 | 2023-02-13 20:24
有具有相同标题这样的计算器一个问题在这里,但我想问问,如果它是可以做到在Java中类似这样的东西.
我想做一些类似于desmos的东西,就像那个人在Javascript中做的那样,但是我想用Java来使用lwjgl 2.我是Java的新手,我想知道是否可以转换一块字符串转换为方法.可能吗?
我已经找到了可能的选项,我发现你可以制作自己的Java eval()
方法.但是我不想为x
窗口宽度的每个像素替换字符串.
提前致谢.
1> Ivan Georgie..:
你需要的是一个可以计算表达式的引擎/库,在执行时定义为字符串.如果将评估代码包装到函数调用中(例如lambda函数),您将获得所需的内容.
选项1:您可以使用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的脚本引擎.您可以使用它来计算定义的表达式,例如,在Javascript中:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("sin(1.25)");
选项3:编译为本机Java.使用此方法,您可以使用模板生成包含表达式的类的.java文件.比你调用Java编译器.这种方法的缺点是在实现中有一些复杂性和一些初始延迟(直到编译类),但性能是最好的.以下是一些探索链接:
使用javax.tools创建动态应用程序
特别是javax.tools.Compiler
注意事项无论您选择何种方法,请记住您需要考虑安全性.允许用户输入可以在没有安全限制的情况下进行评估的代码可能非常危险.