Обратная польская запись Calc: вычитание двух положительных чисел, возвращающих минус? - PullRequest
2 голосов
/ 25 марта 2019

При выполнении вычитания двух чисел на моем калькуляторе обратной польской записи я получаю результат с минусом, например:

20 5 - = -15

Принимая во внимание, что я ожидалчтобы увидеть 15.

Кто-нибудь может увидеть, где я ошибаюсь с моим кодом?

   else if (input.equals("-")) {
            int n1 = stack.pop();
            int n2 = stack.pop();
            int result = n1 - n2;

            stack.push((int)result);
        }

Ответы [ 2 ]

3 голосов
/ 25 марта 2019

Принципом стека является LIFO (Last In First Out).

Поэтому, когда вы сначала толкаете 20, а затем толкаете 5 в стек, первый pop вернет 5, а второй pop вернет 20. Поэтому вы вычисляете 5 - 20 вместо 20 - 5.

Вы должны изменить порядок операндов для правильного вычисления:

else if (input.equals("-")) {
    int n1 = stack.pop();
    int n2 = stack.pop();
    int result = n2 - n1;
    stack.push((int)result);
}
0 голосов
/ 25 марта 2019

Вы попадаете 5, а затем 20. Т.е., вам нужно изменить порядок вычитания:

int result = n2 - n1;
...