0

文字列式を読み取り、最初に括弧で解析するためのメソッドをメインで作成する必要があります。

式は次のとおりです。
(3+4)*7/2

Javaで行う必要があります。しかし、私はそれを行う方法がわかりません。

それに関する任意のアイデア!

4

1 に答える 1

2

これを試して:

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String foo = "(3+4)*7/2";
double result=0;
try {
    /*
    It seems that (on some platforms) this results in a java.lang.RuntimeException 
    because of converting Object to double, so let's replace it with
    Double.doubleValue()
    */
    //result = (double) (engine.eval(foo));
    result = ((Double) (engine.eval(foo))).doubleValue(); //result = 24.5
} catch (ScriptException e) {
    //handle exception here
}

アップデート

式を評価する前に、「JavaScript」ScriptEngine がシステムに登録されているかどうかをテストする必要があります。次のように実行できます。

ScriptEngineManager manager = new ScriptEngineManager();
List<ScriptEngineFactory> factories = manager.getEngineFactories();
for (ScriptEngineFactory factory : factories) {
    System.out.println(factory.getNames());
}

私の出力は

[js, rhino, JavaScript, javascript, ECMAScript, ecmascript]

出力に が含まれていない場合は、とをJavaScript試してください。jsjavascript

ScriptEngine engine = mgr.getEngineByName("js");

また

ScriptEngine engine = mgr.getEngineByName("javascript");

どちらも存在しない場合、js をスクリプト エンジンとして使用して式を評価することはできません。

于 2013-04-25T10:31:54.477 に答える