// true压栈,false运算
private static boolean comp(char a, char b) {
if (b == '(') {
return true;
}
if (b == '*' || b == '/') {
if (a == '*' || a == '/') {
return false;
} else {
return true;
}
}
if (b == '+' || b == '-') {
if (a == '(' || a == '#') {
return true;
} else {
return false;
}
}
if (b == ')') {
return false;
}
if (b == '#') {
return false;
}
return false;
}
Stack ss = new Stack();
Stack sn = new Stack();
String str = "(1+3*(4+5))";
str = str + "#";
char a = '#';
String temp = "";
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c != '#' && c != '(' && c != ')' && c != '*' && c != '/'
&& c != '+' && c != '-') {
temp += c;
continue;
}
System.out.println("a:"+a+"/t"+"c:"+c+"/t");
switch (a) {
case '#':
if (comp(a, c)) {
ss.push(a);
a=c;
if(!temp.equals("")){
sn.push(Integer.parseInt(temp));
}
} else {}
temp = "";
break;
case '(':
if (comp(a, c)) {
ss.push(a);
a=c;
if(!temp.equals("")){
sn.push(Integer.parseInt(temp));
}
} else {
int result;
a = (Character)ss.pop();
}
temp = "";
break;
case ')':// a不可能等于)
if (comp(a, c)) {} else {}
temp = "";
break;
case '+':
if (comp(a, c)) {
ss.push(a);
a=c;
if(!temp.equals("")){
sn.push(Integer.parseInt(temp));
}
} else {
int result;
if(temp.equals("")){
int no = (Integer)sn.pop();
result = (Integer)sn.pop();
result += no;
}else{
result = (Integer)sn.pop();
result += Integer.parseInt(temp);
}
sn.push(result);
a = (Character)ss.pop();
i--;
}
temp = "";
break;
case '-':
if (comp(a, c)) {
ss.push(a);
a=c;
if(!temp.equals("")){
sn.push(Integer.parseInt(temp));
}
} else {
int result;
if(temp.equals("")){
int no = (Integer)sn.pop();
result = (Integer)sn.pop();
result -= no;
}else{
result = (Integer)sn.pop();
result -= Integer.parseInt(temp);
}
sn.push(result);
a = (Character)ss.pop();
i--;
}
temp = "";
break;
case '*':
if (comp(a, c)) {
ss.push(a);
a=c;
if(!temp.equals("")){
sn.push(Integer.parseInt(temp));
}
} else {
int result;
if(temp.equals("")){
int no = (Integer)sn.pop();
result = (Integer)sn.pop();
result *= no;
}else{
result = (Integer)sn.pop();
result *= Integer.parseInt(temp);
}
sn.push(result);
a = (Character)ss.pop();
i--;
}
temp = "";
break;
case '/':
if (comp(a, c)) {
ss.push(a);
a=c;
if(!temp.equals("")){
sn.push(Integer.parseInt(temp));
}
} else {
int result;
if(temp.equals("")){
int no = (Integer)sn.pop();
result = (Integer)sn.pop();
result /= no;
}else{
result = (Integer)sn.pop();
result /= Integer.parseInt(temp);
}
sn.push(result);
a = (Character)ss.pop();
i--;
}
temp = "";
break;
default:
}
System.out.println(sn);
System.out.println(ss);
}
System.out.println("reslut:" + (Integer)sn.pop());