9

このように宣言されたメソッドがあるとしましょう:

public double Calc(String expression) {

// Code

}

次のような文字列式を使用したい

"2 + 4 - (3 * 4)"

次に、にフィードするCalc()と、取得した値が返されます。

文字列から数式を解析して、Javaが理解できる式になるようにできますか?通常は書くことができるので

return 2 + 4 - (3 * 4);

しかし、それはその単一の式に対してのみ機能します。

4

2 に答える 2

7

Dijkstra の twostack アルゴリズムを使用することをお勧めします。

これはあなたが必要とするものです:

public class DijkstraTwoStack {
    public static void main(String[] args) {
                Scanner scanner = new Scanner(System.in);
                String exp[] = scanner.nextLine().split(" ");
        Stack<String> ops = new Stack<String>();
        Stack<Double> vals = new Stack<Double>();

        for(int i = 0; i < exp.length; i++) {
                        String s = exp[i];
            if (s.equals("(")) {
            }
            else if (s.equals("+") || s.equals("*")) {
                ops.push(s);
            } else if (s.equals(")")) {
                getComp(ops, vals);
            } else {
                vals.push(Double.parseDouble(s));
            }
        }
        getComp(ops, vals);
        System.out.println(vals.pop());
    }

    private static void getComp(Stack<String> ops, Stack<Double> vals) {
        String op = ops.pop();
        if (op.equals("+")) {
            vals.push(vals.pop() + vals.pop());
        } else if (op.equals("*")) {
            vals.push(vals.pop() * vals.pop());
        }
    }
}

テストしていませんが、ほぼ正しいはずです。

于 2013-02-26T10:08:47.007 に答える
0

SOに関するいくつかの質問を閲覧しても、JSコンパイラをロードせずにこれを行う方法について公正なアイデアを得る必要があると思うので、採用できるプロセスを答えとして述べさせてください。

まず、数学文字列を中置文字列に変換する関数を使用して文字列を解析する必要があります。次に、これは基本的に、ループ内の文字列を分解して答えを返すことにより、この式を別の関数として評価します。美しく詳細なプロセスについては、こちらを参照してください。

于 2013-02-26T09:28:59.913 に答える