题目:
思路:
使用栈进行符号存储,遍历字符串,如果是数字直接存储到栈中,如果是符号,判断如果是乘除符号就优先计算。优先计算通过弹栈来进行优先计算。
代码:
public static int calculate(String str){
Stack<Integer> stack = new Stack<Integer>();
char preSign='+';
for (int i=0; i<str.length(); i++){
char c = str.charAt(i);
if (Character.isDigit(c)){
int num = c-'0';
switch (preSign){
case '+':
stack.push(num);
break;
case '-':
stack.push(-num);
break;
case '*':
stack.push(stack.pop()*num);
break;
case '/':
stack.push(stack.pop()/num);
break;
}
}else {
preSign=c;
}
}
int res=0;
while (!stack.isEmpty()){
res+=stack.pop();
}
return res;
}
注意事项:
1.代码中preSign的使用来进行符号判断
2.乘除符号的处理