Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are+,-,*,/. Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
//计算逆波兰式
public static int evaluateRPN(String[] tokens) throws Exception
{
Deque<Integer> _stack = new ArrayDeque<Integer>();
int _temp1;
int _temp2;
for(String _token : tokens)
{
switch(_token)
{
case "+":
_temp1 = _stack.pop();
_temp2 = _stack.pop();
_stack.push(_temp2 + _temp1);
break;
case "-":
_temp1 = _stack.pop();
_temp2 = _stack.pop();
_stack.push(_temp2 - _temp1);
break;
case "*":
_temp1 = _stack.pop();
_temp2 = _stack.pop();
_stack.push(_temp2 * _temp1);
break;
case "/":
_temp1 = _stack.pop();
if(_temp1 == 0)//除数为0
{
throw new Exception("zero is divided!");
}
_temp2 = _stack.pop();
_stack.push(_temp2 / _temp1);
break;
default:
_stack.push(Integer.parseInt(_token));
}
}
return _stack.peek();
}