zoukankan      html  css  js  c++  java
  • mini dc(选做)

    一、任务详情

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

    二、源代码

    1.MyDC类

    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();//从栈中弹出操作数2
                    op1=stack.pop();//从栈中弹出操作数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;
        }
    }
    
    

    2.MyDCTester类

    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();
                    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"));
            }
            catch (Exception IOException)
            {
                System.out.println("Input exception reported");
            }
        }
    }
    

    三、运行截图

    SP.码云链接

  • 相关阅读:
    UVA
    把.apk传到站点server下载
    2014腾讯实习生面试经历(重庆站)
    Phalcon 訪问控制列表 ACL(Access Control Lists ACL)
    Regular Expression Matching
    改动Androidproject的名称(非Eclipse重命名)
    Cocos2d-x3.2 LayerMultiplex使用说明
    BAT解密:互联网技术发展之路(5)- 开发层技术剖析
    使用xftp连接VirtualBox中的centos6.5
    【C语言】二维数组中的查找,杨氏矩阵
  • 原文地址:https://www.cnblogs.com/jxxydwt1999/p/10852679.html
Copyright © 2011-2022 走看看