zoukankan      html  css  js  c++  java
  • mini dc 20175303

    mini dc 20175303

    题目要求

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

    补充代码

    import java.lang.String;
    import java.util.StringTokenizer;
    import java.util.Stack;
    /**
     * Demo class
     *
     * @author cxd20175303
     * @date 2019/5/12
     */
    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) {
                    //从栈中弹出操作数2
                    op2 = stack.pop();
                    //从栈中弹出操作数1
                    op1 = stack.pop();
                    //根据运算符和两个操作数调用evalSingleOp计算result;
                    result = evalSingleOp(token.charAt(0), op1, op2);
                    //计算result入栈;
                    stack.push(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;
                    break;
                default:
                    return 0;
            }
            return result;
        }
    }
    

    运行截图

    代码链接

  • 相关阅读:
    java 导入导出的 命令
    点击 table 单元格 取值
    SQL Server存储过程创建和修改
    js正则匹配过滤 特殊字符
    java 学习框架
    Table 表单样式
    Table 表单
    Table 固定表头的几种方法
    .Net 高效开发之不可错过的实用工具
    sql 批量插入数据到Sqlserver中 效率较高的方法
  • 原文地址:https://www.cnblogs.com/cxd20175303/p/10854153.html
Copyright © 2011-2022 走看看