Как переписать мой метод toPostfix() для использования isOperator()?

В моей программе я работаю над преобразованием из инфикса в постфикс. У меня есть метод с именем isOperator(), который будет возвращать true, если предшествование оператора больше 0.

Я должен переписать метод toPostfix() с помощью isOperator(), но я не уверен, с чего начать.

public class Expression {
   private static final String SPACE = " ";
   private static final String PLUS = "+";
   private static final String MINUS = "-";


   public static int rank(String operator) {
      switch (operator) {
         case "*":
         case "/":
            return 2;
         case PLUS:
         case MINUS:     //2
            return 1;
         default:
            return -1;
      }
   }

   public static boolean isOperator(String token) {     //4
      if (rank(token) > 0){
         return true;
      }
      return false;
   }

   public static String toPostfix(String infixExpr) {
      StringBuilder output = new StringBuilder();
      Stack<String> operators = new ArrayStack<>();
      for (String token: infixExpr.split("\\s+")) {
         if (rank(token) > 0) { // operator
            // pop equal or higher precedence
            while (!operators.isEmpty() &&
                  rank(operators.peek()) >= rank(token)) {
               output.append(operators.pop() + SPACE);
            }
            operators.push(token);
         } else {               // operand
            output.append(token + SPACE);
         }
      }
      while (!operators.isEmpty()) {
         output.append(operators.pop() + SPACE);
      }
      return output.toString();
   }

   public static void main(String[] args) {
      System.out.println(rank("/"));
      String infix = "a * b * c + d / e / f";
      System.out.println(toPostfix(infix));
   }
}

2 ответа

Решение

+ Изменить if(rank(token) > 0){ в вашем методе postfix для isOperator(token)

Изменить: if(rank(token) > 0){

Для того, чтобы: isOperator(token)

Другие вопросы по тегам