求解后缀表达式(RPN)

  1. package stack.rpn;
  2. import stack.ALStack;
  3. /**
  4.  * 计算RPN的值
  5.  * @author Kyle
  6.  * @version 1.0
  7.  */
  8. public class CalcRPN {
  9.     public static void main(String[] arg) {
  10.         System.out.println("2 5 3 * +的计算结果为:" + calc("20 5 3 * +"));
  11.         System.out.println("2 5 + 3 * +的计算结果为:" + calc("2 5 + 3 *"));
  12.     }
  13.     /**
  14.      * 计算后缀表达是的值,目前只支持整数
  15.      * 
  16.      * @return
  17.      */
  18.     private static int calc(String exp) {
  19.         ALStack<Integer> calcStack = new ALStack<Integer>();// 数字堆栈
  20.         StringBuffer noBuf = new StringBuffer();// 数字数组
  21.         for (int i = 0; i < exp.length(); i++) {
  22.             char ch = exp.charAt(i);
  23.             if (Character.isDigit(ch)) {// 检查是否是数字
  24.                 noBuf.append(ch);
  25.             } else if (Character.isSpaceChar(ch)
  26.                     && !noBuf.toString().equals("")) {// 是否是空格
  27.                 calcStack.push(Integer.parseInt(noBuf.toString()));// 解析将数字放入堆栈
  28.                 noBuf = new StringBuffer();
  29.             } else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') { // 判断是否是运算符
  30.                 int right = calcStack.pop();// 弹出右操作数
  31.                 int left = calcStack.pop();// 弹出左操作数
  32.                 int val = 0;// 计算的中间值
  33.                 switch (ch) {
  34.                 case '+':
  35.                     val = right + left;
  36.                     break;
  37.                 case '-':
  38.                     val = right - left;
  39.                     break;
  40.                 case '*':
  41.                     val = right * left;
  42.                     break;
  43.                 case '/':
  44.                     val = right / left;
  45.                     break;
  46.                 }
  47.                 calcStack.push(val); // 将计算数据放入堆栈中
  48.             }
  49.         }
  50.         return calcStack.pop();// 返回最后一个数据
  51.     }
  52. }

你可能感兴趣的:(求解后缀表达式(RPN))