Java 使用ScriptEngine从字符串计算数学公式
这是我的密码:Java 使用ScriptEngine从字符串计算数学公式,java,string,Java,String,这是我的密码: double value = 2.55; String formule = "x+x"; 我想将句子中的x变量替换为valuevariable,所以我的下一个代码是: formule = formule.replace("x", String.valueOf(value)); System.out.println(formule); 我在终端中返回了0.0+0.0 这是我的代码,其中x->0.0永远: protected double Formule(Double Valu
double value = 2.55;
String formule = "x+x";
我想将句子中的x变量替换为value
variable,所以我的下一个代码是:
formule = formule.replace("x", String.valueOf(value));
System.out.println(formule);
我在终端中返回了0.0+0.0
这是我的代码,其中x->0.0永远:
protected double Formule(Double Value) throws ScriptException
{
String ValueString = Value.toString();
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
Double source = null;
formule = formule.replace("sin", "Math.sin").
replace("cos", "Math.cos").
replace("tan", "Math.tan").
replace("sqrt", "Math.sqrt").
replace("sqr", "Math.pow").
replace("log", "Math.log").
replace("x", ValueString);
try {
source = (Double)engine.eval(formule);
} catch(Exception exc) {
JOptionPane.showMessageDialog(null, "Invalid input", "Error", JOptionPane.ERROR_MESSAGE);
}
this.repaint();
return source;
}
已解决强>
我刚刚创建了一个名为tmp
的临时字符串,现在它看起来像这样
protected double Formule(Double Value) throws ScriptException
{
String tmp;
tmp = formule.replace("sin", "Math.sin").
replace("cos", "Math.cos").
replace("tan", "Math.tan").
replace("sqrt", "Math.sqrt").
replace("sqr", "Math.pow").
replace("log", "Math.log").
replace("x", String.valueOf(Value));
try {
return (Double)engine.eval(tmp);
} catch(Exception fexp) {
return null;
}
return 0;
}
因为字符串公式
在我的类中是全局变量此代码(来自您的帖子)——
印刷品
2.55+2.55
当你在这里跑步的时候。您确定访问的是与上面初始化的相同的
双值
?看起来您必须访问另一个名为value
的变量(未按预期初始化-值0
)有什么问题,除了明显的键入“replase”?@DanielB OP想要/需要使用一个公式求值器,使用一个基本的字符串。这一点都没有错,所以我不知道为什么这个问题会得到这么多的反对票。在我的代码中没有错,只是在这里,在这篇博文中,你理解了一些我没有理解的东西。我没有投反对票。添加了删除答案的代码。下次,请编辑您的问题并添加相关信息,而不是发布答案。这让我松了一口气,我真的很想知道问题代码中出了什么问题!编辑后:看起来您必须访问另一个名为value的变量(未初始化)。该变量应使用0
值初始化,否则代码甚至无法编译…@luigimendoza双值代码>也许。。。谁知道呢?那是变量声明,不是初始化。本地未初始化变量不能使用,除非您在其上设置值,否则它们不会像类字段那样使用默认值初始化。
2.55+2.55