0
点赞
收藏
分享

微信扫一扫

Dijkatra 迪克斯特拉双栈算术表达式求值算法 Java


import java.util.Stack;

/**
* Created by yywang on 2017/1/14.
*/
public class Evaluate

static double eval(String tmp){
Stack<String> ops = new Stack<String>();
Stack<Double> vals = new Stack<Double>();
for (int i=0; i<tmp.length(); i++){
String s = String.valueOf(tmp.charAt(i));

//运算符压入 操作符栈
if(s.equals("(")) ;
else if(s.equals("+")) ops.push(s);
else if(s.equals("-")) ops.push(s);
else if(s.equals("*")) ops.push(s);
else if(s.equals("/")) ops.push(s);
else if(s.equals(")")){
//遇到右括号开始计算
String op = ops.pop();
double v = vals.pop();
if (op.equals("+")) v = vals.pop() + v;
if (op.equals("-")) v = vals.pop() - v;
if (op.equals("*")) v = vals.pop() * v;
if (op.equals("/")) v = vals.pop() / v;

vals.push(v);
}else{
//数字压入 操作数栈
vals.push(Double.parseDouble(s));
}

}
return vals.pop();
}
public static void main(String[] args) {
String t = "(1+((2+3)*(4*5)))";
double

输出结果

101.0


举报

相关推荐

0 条评论