public static double calculate(String path) {
In in=new In(path);
Stack<String> ops=new Stack<String>();
Stack<Double> nums=new Stack<Double>();
while(!in.isEmpty()) {
String string=in.readString();
if(string.equals("(")) ops.push(string);
else if(string.equals("+")) ops.push(string);
else if(string.equals("-")) ops.push(string);
else if(string.equals("*")) ops.push(string);
else if(string.equals("/")) ops.push(string);
else if(string.equals(")")){
String op=ops.pop();
double num=nums.pop();
if(op.equals("+")) num=nums.pop()+num;
else if(op.equals("-")) num=nums.pop()-num;
else if(op.equals("*")) num=nums.pop()*num;
else if(op.equals("/")) num=nums.pop()/num;
else if(op.equals("sqrt")) num=Math.sqrt(num);
nums.push(num);
}
else nums.push(Double.parseDouble(string));
}
return nums.pop();
}
双栈算术求值
最新推荐文章于 2023-06-24 17:25:39 发布