为什么堆栈弹出(而不是+

时间:2016-03-05 23:41:38

标签: java stack postfix-notation infix-notation

我正在编写一个代码,将中缀转换为后缀以进行hw赋值。 我已经调试了它,但我似乎无法解决为什么当它从堆栈弹出时返回'('而不是'+'

 StackInterface<Character> stack = new ArrayStack<Character>();
      String postfix = "";
      int length = infxEx.length();
       for(int i =0; i != length; ++i){

          char oneChar =infxEx.charAt(i);  
         if(oneChar == '('){
            stack.push(oneChar);
          }else
         if(oneChar == '*' || oneChar == '/'|| oneChar == '%'|| oneChar == '+' || oneChar == '-'){
           stack.push(oneChar);
         //error checking input is int
         }
         else if(oneChar == ')'){
           while (stack.pop() != '(' && !stack.empty()){

           char popoff =  stack.pop();
           postfix = postfix + popoff; 
         }
         }

谢谢!

1 个答案:

答案 0 :(得分:0)

在处理到达)的循环中,对于您检查的每个元素,从堆栈中弹出两次(首先在while条件下检查stack.pop() != '('并再次在循环体内抓取popoff,所以你将失去大约一半的角色;因为这是通过在主循环中达到)来触发的,并且因为你忽略了任何不是操作员的事情(所以你的(a + b)的堆栈将包含(+,您在检查+时会删除(,这意味着您将(添加到您的postfix中while循环体,并在堆栈为空时终止循环。

使用peek操作查看堆栈顶部而不实际删除while循环条件中的值来解决该问题,如果在中缀表达式中接受除运算符之外的标记,则需要{{1处理该情况的子句。