【问题标题】:Evaluate Post fix with negative numbers用负数评估 Post fix
【发布时间】:2014-12-31 19:35:24
【问题描述】:

我很难弄清楚如何让我的后缀来评估负数。

我的后缀中缀似乎适用于负数,例如我的程序中的示例.. 中缀:(-3)+5*3 后缀:3-53*+

这是我的评估方法,我知道的代码越少越好,如果您想查看我的任何其他代码,请告诉我。我尝试了很多事情,但都没有运气,任何建议或建议将不胜感激!

    public int evaluate(String evalute){
   int number1;
   int number2;
   int result = 0;
   int finalResult = 0;

   Stack<Integer> d = new Stack<Integer>();

   for(int i = 0; i < evalute.length(); i++){
     char curChar = evalute.charAt(i);
     if(curChar >= 48 && curChar <= 57){
       int store = curChar;
       store -=48;
       d.push(store);

     }

     else if(curChar == '+'){
       number1 = d.pop();
       number2 = d.pop();
       result = number1 + number2;
       d.push(result);
     }

     else if(curChar == '-'){
       number1 = d.pop();
       number2 = d.pop();
       result = number2 - number1;
       d.push(result);
   }
     else if(curChar =='*'){
       number1 = d.pop();
       number2 = d.pop();
       System.out.println(result = number1 * number2);
       d.push(result);
     }
     else if(curChar =='/'){
       number1 = d.pop();
       number2 = d.pop();
       result = number2 / number1;
       d.push(result);
     }
   }


   finalResult = d.pop();
   return finalResult;
 }

【问题讨论】:

    标签: java stack postfix-notation


    【解决方案1】:

    我会举你的例子

    中缀:(-3)+5*3 后缀:3-53*+

    EVAUATION
    push 3
    
    read - ---> you have no 2 elements in the stack -> EXCEPTION 
    (or by luck you can have 2 but is not the behavior you want)
    

    到目前为止似乎一切正常,但是..你如何区分一元减号和二元减号?当您阅读 3 - 3 时,您是阅读带有两个操作数的减法运算还是两个带有反号的原始操作数?

    最容易采用的解决方案是使用不同的符号来标记负数,例如 ! 字母 N 或任何与减号不同的符号,否则当您阅读减号时,您会弹出 2 个元素堆栈然后你执行减法。

    相反,您想读取 ! 之类的符号,您弹出 1 个元素 (d) 并将其推回堆栈 -d..

    所以从 (-3)+5*3 后缀:3!53*+

    EVALUATION
    push 3
    
    read ! --> pop 3 and push -3
    
    push 5 - push 3
    
    read * ---> pop 5 - pop 3 push 3*5
    
    read + ---> pop 15 (= 3*5) pop -3 and push 15 + (-)3
    

    通过使用这两个不同的符号,你已经解决了你的问题..

    【讨论】:

      【解决方案2】:

      嗯,我猜它是在解析字符串阶段。 您的解析器应该检测它是负数还是正数,在生成令牌之后,您可以继续将中缀转换为后缀并评估后缀。希望对你有帮助:)

      【讨论】:

      • 添加更多细节,也许是一个代码块来澄清你的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 2015-10-20
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多