import java.util.Stack;
public class Calcu{
Stack <Integer>num;
Stack <String>exp;
String expression="7+(8+2*2)/3-1=";
public Calcu(){
num=new Stack<Integer>();
exp=new Stack<String>();
}
public void calculate(){
char t;
int s;
int len=expression.length();
for(int i=0;i<len;i++){
t=expression.charAt(i);
switch(t){
case '-':
case '+':if(!exp.empty()&& !exp.peek().equals("(") && !exp.peek().equals(")")){
s=compute(exp.pop());
num.push(s);
} exp.push(String.valueOf(t));
break;
case '/':
case '*':
if(!exp.empty()&& exp.peek().equals("/")){
s=compute(exp.pop());
num.push(s);
}else if(!exp.empty() && exp.peek().equals("*")){
s=compute(exp.pop());
num.push(s);
}
exp.push(String.valueOf(t));break;
case '(':exp.push(String.valueOf(t));break;
case ')':{
while(!exp.peek().equals("(")){
s=compute(exp.pop());
num.push(s);
}
exp.pop();
break;
}
case '=':{
while(!exp.empty()){
s=compute(exp.pop());
num.push(s);
}
System.out.println(num.pop());
break;
}
default:num.push(t-48);
}
}
}
private int compute(String exp){
int n2=num.pop();
int n1=num.pop();
switch(exp.charAt(0)){
case '+':return n1+n2;
case '-':return n1-n2;
case '*':return n1*n2;
case '/':return n1/n2;
}
return -1;
}
public static void main(String args[]){
Calcu c=new Calcu();
c.calculate();
}
}
算符优先(含括号)
最新推荐文章于 2022-04-28 15:22:02 发布