Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ScriptEngine从字符串计算数学公式_Java_String - Fatal编程技术网

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