zoukankan      html  css  js  c++  java
  • 20155201 第十一周Java课堂实践

    一、表达式后缀表达式:

    a b x c d e / - f x +

    二、mini dc

    MyDC.java

    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)) {
                    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;
        }
    }
    

    MyDCTester.java

    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");
            }
        }
    }
    

    截图:

  • 相关阅读:
    我决定潜心研究技术了...
    new proxy
    谷歌插件开发
    js计算不准确 解决方案
    netty中如何切包
    Spring Boot的ComponentScan原理
    解决org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found character '@'
    深入理解js立即执行函数
    winform 将子窗体显示在父窗体的TabControl控件上
    js隐藏网页元素
  • 原文地址:https://www.cnblogs.com/zhuohua/p/6803767.html
Copyright © 2011-2022 走看看