Принципом стека является 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);
}