Постфикс для инфикса в Java

Я пытаюсь оценить из постфикса.

Мой код компилируется, но окончательный ответ неверен.

Я пытался смотреть на другие ответы, но их не было на Java.

public class PA36Stack
{
   public static void main(String[] args)
   {
      PA31Stack an = new PA31Stack(12);

      String g = "234*+";
      int x = evaluate(an, g);
      System.out.print(x);
   }

   public static int evaluate(PA31Stack b, String g)
   {
      int temp = 0;
      for (int i = 0; i < g.length(); i++)
      {
         if (g.charAt(i) != '+' && g.charAt(i) != '-' && g.charAt(i) != '*' && g.charAt(i) != '/')
         {
            b.push(g.charAt(i));
         }
         else
         {
            int a = b.pop();
            int c = b.pop();

            if (g.charAt(i) == '+')
            {
               temp = a + c;
               b.push(temp);
            }
            //nextone
            if (g.charAt(i) == '-')
            {
               temp = (c - a);
               b.push(temp);
            }
            //two
            if (g.charAt(i) == '*')
            {
               temp = (c * a);
               b.push(temp);
            }
            //three
            if (g.charAt(i) == '/')
            {
               temp = (c / a);
               b.push(temp);
            }
         }
      }
      return b.pop();
   }
}

person Community    schedule 30.10.2013    source источник
comment
также введите код класса PA31Stack   -  person Ravi    schedule 12.11.2013
comment
См. это   -  person craftsmannadeem    schedule 09.03.2016
comment
Вы не оцениваете постфикс путем преобразования в инфикс. Вы оцениваете его слева направо с помощью стека. Непонятно, что вы спрашиваете.   -  person user207421    schedule 26.01.2019


Ответы (1)


Это связано с тем, что вы используете значения ASCII символов, представляющих числа для расчета.

В основном вам нужно преобразовать char, представляющий число, в целое число, которое оно фактически представляет, т.е. сделать из '1' 1 и из '2' 2 и так далее.

Чтобы обойти эту проблему, вам нужно вычесть значение ascii из char '0' при извлечении из стека, чтобы получить реальное целочисленное значение и добавить его при нажатии.

Поскольку вы не опубликовали код своего стека, я отредактировал его, чтобы использовать java.util.Stack<Character>, и получил правильный результат 14 для выражения 234*+.

public static int evaluate(Stack<Character> b, String g) {
    int temp = 0;
    for (int i = 0; i < g.length(); i++) {
        if (g.charAt(i) != '+' && g.charAt(i) != '-' && g.charAt(i) != '*'
                && g.charAt(i) != '/') {
            b.push(g.charAt(i));
        } else {
            int a = b.pop() - '0';
            int c = b.pop() - '0';

            if (g.charAt(i) == '+') {
                temp = a + c;
                b.push((char)(temp + '0'));
            }
            // nextone
            if (g.charAt(i) == '-') {
                temp = (c - a);
                b.push((char)(temp + '0'));
            }
            // two
            if (g.charAt(i) == '*') {
                temp = (c * a);
                b.push((char)(temp + '0'));
            }
            // three
            if (g.charAt(i) == '/') {
                temp = (c / a);
                b.push((char)(temp + '0'));
            }
        }
    }
    return b.pop() - '0';
}
person A4L    schedule 12.11.2013