zoukankan      html  css  js  c++  java
  • 20155333 第十一周课堂练习

    第十一周课堂内容

    后缀表达式

    ab*cde/-f*+

    补充代码

    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 = '/';
    private Stack 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 ()
            {
              //从栈中弹出操作数2
                //从栈中弹出操作数1
            //根据运算符和两个操作数调用evalSingleOp计算result;
               //计算result入栈;
              }
            else
                //如果是操作数
               //操作数入栈;
            }
    
             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;
           }
        }
    
    需要补充的部分
    //如果是运算符,调用isOperator
      if ()
                {
                  //从栈中弹出操作数2
                    //从栈中弹出操作数1
                //根据运算符和两个操作数调用evalSingleOp计算result;
                   //计算result入栈;
                  }
                else
                    //如果是操作数
                   //操作数入栈;
                }
    

    调用isOperator方法判断所输入的是否为运算符

    若输入运算符,则

    //如果是运算符,调用isOperator
    if (isOperator(token))
    

    根据提示信息和栈的基础操作,从栈中弹出操作数stack.pop(),即

     op1 = stack.pop();//从栈中弹出操作数2
     op2 = stack.pop(); //从栈中弹出操作数1
    

    调用evalSingleOp对两个操作数进行加减乘除,并用charAt(0)方法取得字符串的运算符号,进行相应的运算。

    result = evalSingleOp(token.charAt(0),op1,op2);//根据运算符和两个操作数调用evalSingleOp计算result;
    

    根据提示进行入栈操作

    stack.push(result); //计算result入栈;
    

    若输入的是操作数,则

    stack.push(Integer.parseInt(token));//操作数入栈;
    
    测试代码
    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");
                     }
               }
      }
    
    测试结果截图

  • 相关阅读:
    The formatter threw an exception while trying to deserialize the message in WCF
    通过Web Deploy方式部署WCF
    The Managed Metadata Service or Connection is currently not available
    How to create Managed Metadata Column
    冒泡算法
    asp.net core 实战项目(一)——ef core的使用
    Vue学习笔记入门篇——安装及常用指令介绍
    Vue学习笔记入门篇——数据及DOM
    Vue学习笔记目录
    Chart.js在Laravel项目中的应用
  • 原文地址:https://www.cnblogs.com/rh123456/p/6804889.html
Copyright © 2011-2022 走看看