//将转换成逆波兰表达式的list进行计算publicstaticintcal(List<String> list){//创建一个栈Stack<String> stack =newStack<>();//遍历listfor(String s : list){if(s.matches("\\d+")){//匹配多位数//直接入栈
stack.push(s);}else{//pop出两个数,并运算,再入栈int num1 =Integer.parseInt(stack.pop());int num2 =Integer.parseInt(stack.pop());int res =0;if(s.equals("+")){
res = num2+num1;}elseif(s.equals("-")){
res = num2-num1;}elseif(s.equals("*")){
res = num2*num1;}elseif(s.equals("/")){
res = num2/num1;}else{thrownewRuntimeException("符号错误");}
stack.push(res+"");}}returnInteger.parseInt(stack.pop());}
优先级的判断
//返回一个运算符对应的优先级classOperation{privatestaticint ADD=1;privatestaticint SUB=1;privatestaticint MUL=2;privatestaticint DIV=2;//返回对应的优先级数字publicstaticintgetValue(String operation){int res =0;switch(operation){case"+":
res = ADD;break;case"-":
res = SUB;break;case"*":
res = MUL;break;case"/":
res = DIV;break;default:System.out.println("不存在的运算符");break;}return res;}}