私は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());
}
}
}
がそれをテストしていませんが、それは右であるべきである:
これはかなりあなたが必要なものでなければなりません。
これを見てください:あなたは、通常、式ツリーはhttpを使用したい独自のロールするには http://stackoverflow.com/questions/2605032/using-eval-in-java –
を://en.wikipediaを.org/wiki/Binary_expression_tree –
@betoしかしこれは、JSエンジン全体を開いてこの1つのことを行うように思えます。それは私に思い起こさせるヒントを与えましたが。ありがとう! – OmniOwl