// 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来判断上下溢出的。