• mini dc(选做)


    作业要求

    提交测试截图和码云练习项目链接,实现Linux下dc的功能,计算后缀表达式的值

    • MyDC.class
    import com.sun.xml.internal.fastinfoset.util.CharArray;
    import java.util.StringTokenizer;
    import java.util.Stack;
    public class MyDC {
        /**
         * constant for addition symbol
         */
        private final char ADD = '+';
        /**
         * constant for subtraction symbol
         */
        private final char SUBTRACT = '-';
        /**
         * constant for multiplication symbol
         */
        private final char MULTIPLY = '*';
        /**
         * constant for division symbol
         */
        private final char DIVIDE = '/';
        /**
         * the stack
         */
        private Stack<Integer> stack;
    
        public MyDC() {
            stack = new Stack<Integer>();
        }
    
        public int evaluate(String expr) {
            int op1, op2, result = 0;
            String token;
            StringTokenizer tokenizer = new StringTokenizer(expr);
    
            while (tokenizer.hasMoreTokens()) {
                token = tokenizer.nextToken();
                //如果是运算符,调用isOperator
                if (isOperator(token)==true) {
                    op2=stack.pop();
                    op1=stack.pop();
                    //从栈中弹出操作数2
                    //从栈中弹出操作数1
                    result=evalSingleOp(token.charAt(0),op1,op2);
                    //根据运算符和两个操作数调用evalSingleOp计算result;
                    stack.push(result);
                    //计算result入栈;
                }
                else//如果是操作数
                {
                    stack.push(Integer.parseInt(token));
                }
                //操作数入栈;
            }
    
            return result;
        }
    
        private boolean isOperator(String token) {
            return (token.equals("+") || token.equals("-") ||
                    token.equals("*") || token.equals("/"));
        }
    
        private int evalSingleOp(char operation, int op1, int op2) {
            int result = 0;
    
            switch (operation) {
                case ADD:
                    result = op1 + op2;
                    break;
                case SUBTRACT:
                    result = op1 - op2;
                    break;
                case MULTIPLY:
                    result = op1 * op2;
                    break;
                case DIVIDE:
                    result = op1 / op2;
            }
            return result;
        }
    }
    * **MyDCTester.class**
    import java.util.Scanner;
             public class MyDCTester  {
    
                public static void main (String[] args) {
            String expression, again;
    
            int result;
    
                 try
                {
                       Scanner in = new Scanner(System.in);
    
                       do
                           {
                           MyDC evaluator = new MyDC();
                             System.out.println ("Enter a valid postfix expression: ");
                           expression = in.nextLine();
    
                          result = evaluator.evaluate (expression);
                            System.out.println ("That expression equals " + result);
                             System.out.print ("Evaluate another expression [Y/N]? ");
                           again = in.nextLine();
                          System.out.println();
                          }
                     while (again.equalsIgnoreCase("y"));
                  }![](http://images2015.cnblogs.com/blog/1071653/201705/1071653-20170503220452023-968944949.jpg)
    
                catch (Exception IOException)
             {
                     System.out.println("Input exception reported");
                }
            }
     }
    • 测试截图

    码云链接:https://gitee.com/wffloveaxy/wff

  • 相关阅读:
    一些 奇怪 的 积分方法
    《费马大定理的证明是错的→觉醒→寻找控失的智慧 02》 回复
    《【通告】教科书写的电磁波方程完全错了,读正确的吧:》 回复
    【信】东方学帝回复俄罗斯科学院士首席科学家
    基于 感抗电路 的 电磁场模型 和 基于 量纲分析 推导 麦克斯韦方程 光速公式
    《《大统一的同一组方程》有了新的进展》 回复
    数学吧 第六届 吧赛 结束了, 我们 是不是 也来点 反相吧 物理竞赛 什么的 ?
    socket之recv() 阻塞&非阻塞
    C语言判断闰年
    C++11智能指针unique_ptr用法使用场景分析
  • 原文地址:https://www.cnblogs.com/wff666999/p/10819408.html
Copyright © 2020-2023  润新知