// write your code here
public static int resolve(String expr) {
String[] tokens = expr.split(" ");
int length = tokens.length;
Stack<Integer> stack = new Stack<>();
int a , b , c;
for (int i = 0; i < length; i++) {
if( !isOperator(tokens[i]) ) {
stack.push(Integer.parseInt(tokens[i]));
} else {
if(!isSelfIncress(tokens[i])) {
try {
a = stack.pop();
b = stack.pop();
c = getRS(b, a, tokens[i]) ;
if(stack.size() > 16) return -2;
stack.push(c);
} catch (EmptyStackException e) {
return -1;
}
}
if(isSelfIncress(tokens[i])) {
try {
a = 0;
b = stack.pop();
c = getRS(b, a, tokens[i]) ;
if(stack.size() > 16) return -2;
stack.push(c);
} catch (EmptyStackException e) {
return 1;
}
}
}
}
return stack.peek();
}
public static boolean isOperator(String string) {
if("+".equals(string) || "*".equals(string) ||
"^".equals(string) ) {
return true;
} else
return false;
}
public static boolean isSelfIncress(String string) {
if("^".equals(string) ) {
return true;
} else {
return false;
}
}
public static int getRS(int a ,int b , String operator){
if("+".equals(operator)) {
return a + b;
} else if("*".equals(operator)) {
return a * b;
} else if("^".equals(operator)) {
return ++a;
}
return 0;
}
我是通过catch异常和判断是否大于16来判断上下溢出的。