【问题标题】:ArrayStack: getting wrong output on implementationArrayStack:在实现时得到错误的输出
【发布时间】:2015-02-07 22:26:01
【问题描述】:

java中的程序是对后缀算术表达式求值。 我的程序没有收到任何错误,但我得到了错误的输出。

我正在尝试评估表达式(1*(((2+3)*(4-5))+6)),其结果为1。 但我得到的输出为11。 它的后缀表达式是1 2 3 + 4 5 - * 6 + *

期待您的帮助。 谢谢!!

public static void evaluatePostfix(String sol)
{

    ArrayStack<Double> nlist = new ArrayStack<Double> ();
    double op1, op2, result;
    char ch;



    for (int i = 0; i < sol.length(); i++)
    {    

         if ('0' <= sol.charAt(i) && sol.charAt(i) <= '9')
            nlist.push((double)(sol.charAt(i) - '0'));
        else

          if (sol.charAt(i)=='+'||sol.charAt(i)=='-'||sol.charAt(i)=='*'||sol.charAt(i)=='/') 
        {

            op1 = nlist.pop();
                op2 = nlist.pop();
            ch = sol.charAt(i);

        switch(ch){
            case '+':
                nlist.push(op1 + op2);  
                break;  
            case '-':
                nlist.push(op1 - op2);      
                break;  
            case '*':
                nlist.push(op1 * op2);      
                break;  
            case '/':
                nlist.push(op1 / op2);      
                break;  
            default:nlist.push(0.000);  
            }           
           }                    
      }
    result = nlist.pop();
    System.out.println(result);
   }

【问题讨论】:

  • 您是否尝试过在调试器中查看您的算法出错的地方?
  • 我看不出你在哪里处理括号。
  • @DourHighArch 你不需要担心括号。这就是使用后缀表达式的全部意义所在。

标签: java stack postfix-notation


【解决方案1】:

当您从堆栈中弹出时,op2 是位于顶部的元素,op1 位于顶部 1。将其更改为:

op2 = nlist.pop();
op1 = nlist.pop();


更清楚地说,如果你的后缀表达式是 56 -(所以中缀是 5-6)你的堆栈是
| 6 |
| 5 |

当你得到 - 你正在做 nlist.push(op1 - op2); 它将 6-5 推入堆栈,而你应该推 5-6

【讨论】:

  • 非常感谢!!得到输出
  • 我是这个网站的新手,我不知道如何接受答案
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
相关资源
最近更新 更多