这个跟先前的逆波兰式差不多,这次就吸取了上次的教训,switch中不用String进行判断,改用int类型。
public int evalRPN(String[] tokens) { Stack<String> stack = new Stack<String>(); String s = "+-*/"; int len = tokens.length,index=0; int i=1,first = 0,second = 0; if(len==0||len==2){ return 0; }else if(len==1) { return Integer.valueOf(tokens[0]); } stack.push(tokens[0]); while(i<len){ if(s.indexOf(tokens[i])!=-1){ second = Integer.valueOf(stack.pop()); first = Integer.valueOf(stack.pop()); index = s.indexOf(tokens[i]); switch(index){ case 0: first = first+second; break; case 1: first = first-second; break; case 2: first = first * second; break; case 3: first = first / second; break; } stack.push(String.valueOf(first)); }else{ stack.push(tokens[i]); } i++; } return Integer.valueOf(stack.pop()); }