Отсутствующие пробелы в выводе выражения Postfix - Java

Мой код успешно преобразует инфиксное выражение в постфиксное выражение. Однако, когда я ввожу число, состоящее более чем из 1 цифры (например, 546), я не получаю пробелов между этим числом и правым операндом.

Тестовый запуск моего кода: Ввод: Введите выражение: (24/4) / (15/3) * 10 - 4 + 2 Вывод: Постфиксное выражение: 244/153//10 * 4 - 2+

Я бы хотел, чтобы это было Постфиксное выражение: 24 4/ 15 3/ / 10 * 4 - 2+

Это мой код: предложите любые изменения, которые позволят мне вставлять пробелы в вывод.

import java.util.*;

public class PostfixConversion {

    public static void main(String args[]) {

        System.out.print("Enter an expression: ");
        String infix = new Scanner(System.in).nextLine();

        System.out.println(convertToPostfix(infix));

    }


   public static boolean precedence(char first, char second)
   {
      int v1 = 0, v2 = 0;
      //find value for first
      if(first == '-' || first == '+'){
         v1 = 1;
      }else if(first == '*' || first == '/'){
         v1 = 2;    
      }//end if

      //find value for second
      if(second == '-' || second == '+'){
         v2 = 1;
      }else if(second == '*' || second == '/'){
         v2 = 2;    
      }//end if

     if(v1 < v2){
        return false;
     }//end if

     return true;
  }//end precedence method

 //converts infix expression into postfix expression
 public static String convertToPostfix(String infixExp)
  {
     String postFix = "The Postfix Expression is: ";
     Stack<Character> stack = new Stack<Character>();
     char character = ' ';

     for(int i = 0; i < infixExp.length(); i++)
     {
         character = infixExp.charAt(i);

         //determine if character is an operator
         if(character == '*' || character == '-' || character == '/' || character == '+')
         {
             while(!stack.empty() && precedence(stack.peek(), character)){
                 postFix += stack.pop();
             }//end while
             stack.push(character);
         }
         else if(character == '(') //check for left parenthesis
         {
             stack.push(character);
         }
         else if (character == ')') 
         {
             while(!stack.peek().equals('(') && !stack.isEmpty()){ //add characters until left parenthesis
                 postFix += stack.pop();
             }//end while

             if(!stack.isEmpty() && stack.peek().equals('(')){
                 stack.pop(); // pop/remove left parenthesis
             }
         }
         else
         {
             postFix += character;
         }//end if
     }//end for
     while(!stack.empty()) //add the remaining elements of stack to postfix expression
     {
         if(stack.peek().equals('('))
         {
             postFix = "There is no matching right parenthesis.";
             return postFix;
         }
         postFix += stack.pop();
     }
         return postFix;
 }//end convertToPo
}

person Bharat Edupghanti    schedule 21.10.2017    source источник
comment
Посмотрите некоторые существующие реализации алгоритма маневровой станции Djkstra, чтобы увидеть, как на самом деле должен быть реализован метод precedence(). Это не так сложно, как вы это сделали.   -  person user207421    schedule 22.10.2017


Ответы (1)


Исправление состоит в том, чтобы добавить сюда строку (см. комментарий к коду):

if(character == '*' || character == '-' || character == '/' || character == '+')
{
    postFix += ' '; // <-- add space here
    while(!stack.empty() && precedence(stack.peek(), character)){
        postFix += stack.pop();
    }//end while
    stack.push(character);
}

после применения исправления вывод на моей машине выглядит так:

The Postfix Expression is: 24 4/   15 3/  / 10  * 4  - 2+
person Nir Alfasi    schedule 21.10.2017