import java.util.Scanner;
import java.util.Stack;
public class Evaluate {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String evaluate = scanner.nextLine();
char a[] = evaluate.toCharArray();//将字符串转化为字符数组
Stack<String> opsStack= new Stack<String>();
Stack<Double> valStack = new Stack<Double>();
int i = 0;
while(i<a.length){
String string = String.valueOf(a[i]);
if(string.equals("("));
else if(string.equals("+")) opsStack.push(string);
else if(string.equals("-")) opsStack.push(string);
else if(string.equals("*")) opsStack.push(string);
else if(string.equals("/")) opsStack.push(string);
else if(string.equals(")")){
String oString = opsStack.pop();
double v = valStack.pop();
if(oString.equals("+")) v = v+valStack.pop();
if(oString.equals("-")) v = v-valStack.pop();
if(oString.equals("*")) v = v*valStack.pop();
if(oString.equals("/")) v = v/valStack.pop();
valStack.push(v);
}
else {
valStack.push(Double.parseDouble(string));
}
i++;
}
System.out.println(valStack.pop());
}
}
Dijkstra的双栈算术表达式求值算法
最新推荐文章于 2021-05-18 05:56:00 发布