0

I've been coding a class that takes a string input and then converts it into postfix notation. For some reason I cannot seem to find a bug that I have. Everything seems to work ok until the couple of last test cases that I run.

My input test case: (a*(b+c)-(d-e)/f) *g/(h-i)-j *k

My expected output test case: abc+*de-f/-g*hi-/jk*-

My output case: abc+de-f/-*ghi-jk*-/*

I've been looking at my code for like 2 hrs trying different things to fix the problem, but I still can't seem to find what the problem is. If someone could help me with identifying the problem, I would greatly appreciate it.

Here's the class:

import java.util.Stack;

public class InfixToPostfixConverter
{
//**********************************************************************
//The precedence method determines the precedence between two operators.
//If the first operator is of higher or equal precedence than the second
//operator, it returns the value true, otherwise it returns false.
//***********************************************************************
public static boolean precedence(char topStack, char currentChar)
{
   if(topStack == '*' || topStack == '/'){
       if(currentChar == '+' || currentChar == '-'){
           return true;
       }
   }
   else if(topStack == currentChar){
       return true;
   }
   else if(topStack == '+' && currentChar == '-'){
      return true;
   }
   else if(topStack == '-' && currentChar == '+'){
      return true;
   }
   else if(topStack == '*' && currentChar == '/'){
       return true;
   }
   else if(topStack == '/' && currentChar == '*'){
       return true;
   }

   return false;
}
char currentChar = infixString.charAt(i);

    //Case A:
     if(currentChar != '+' && currentChar != '-' && currentChar != '*' && currentChar != '/' && currentChar != '(' && currentChar != ')' ){
         postfixString += currentChar;
     }

    //Case B:
     else if(currentChar == '('){
         stack1.push(currentChar);
     }

    //Case C:
     else if(stack1.isEmpty() && currentChar == '+' || currentChar == '-' || currentChar == '*' || currentChar == '/'){
         stack1.push(currentChar);
     }

    //Case D:
     else if(currentChar == '+' || currentChar == '-' || currentChar == '*' || currentChar == '/' && !stack1.isEmpty()){
         char topStack = stack1.peek();

        while(!stack1.isEmpty()){
            if(precedence(topStack, currentChar)){
                postfixString += stack1.pop();
            }
            else{
                stack1.push(currentChar);
                break;
            } 

        }



     }

    //Case E:
     else if(currentChar == ')' && !stack1.isEmpty()){
         while(!stack1.isEmpty() && stack1.peek() != '('){
             postfixString += stack1.pop();
         }
         stack1.pop();
     }


  } //end of for loop


    //Case F:
  if(!stack1.isEmpty() && stack1.peek() == '('){
      return "No matching close parenthesis error.";
  }
  else if(!stack1.isEmpty() && stack1.peek() != '('){
      while(!stack1.isEmpty() && stack1.peek() != '('){
          postfixString += stack1.pop();
      }
  }


  return postfixString;


}//end of convertToPostfix method

}//end of the InfixToPostfixConverter class
Suds2
  • 241
  • 2
  • 5
  • 14

0 Answers0