java Стек домашнее задание положить номер в стек - PullRequest
0 голосов
/ 04 апреля 2020

Привет, каждый, кто нуждается в помощи, чтобы ответить на вопрос в java stack

Это мой вопрос: завершите описанный ниже метод, который оценивает строку, представляющую арифметическое c выражение в обратном Poli sh ( постфикс) нотация. Строка содержит выражение, состоящее из чисел от 0 до 9 и операторов «+», «-», «*» и «/».

Например, это несколько возможных строк ввода и соответствующие результаты:

Ввод: Вывод: "12+" 3
"43 *" 12
"123 + "5
" 123
+ "7
" 12 + 3 * "9
Чтобы помочь вам решить эту проблему, вы можете использовать стандартный класс Stack, который реализует стек целых чисел:

Stack<Integer> stk = new Stack<>(); // create a stack
stk.push(5);                        // push an integer onto the top of the stack
int n = stk.pop();                  // pop an integer from the top of the stack
if ( stk.empty() ) ...              // test if the stack is empty

Я начал отвечать, это мой код:

    Stack<Integer> stk = new Stack<>();

int res=0;

        for (int i = 0; i < expression.length(); i++) {
            char ch = expression.charAt(i);

            if (Character.isDigit(ch)) {
                stk.push(ch - '0');
            } 
else {
                if(stk.isEmpty())
            {
                return 0;
            }

                if (ch == '-') {
                    res = stk.pop() - stk.pop();
                    res=res*-1;
                }

                if (ch == '*') {
                    res = stk.pop() * stk.pop();
                }


                if (ch == '+') {
                    res = stk.pop() + stk.pop();
                }
                if (ch == '/') {
                    res = stk.pop() / stk.pop();
                }
            }

}


     return res;

Это ошибка, которую я получил, я не понимаю, что не так в этом коде.

ошибка:

 An exception of type java.util.EmptyStackException was reported when executing this line:

    res = stk.pop() * stk.pop();

Exception in thread "main" java.util.EmptyStackException
    at java.util.Stack.peek(Stack.java:102)
    at java.util.Stack.pop(Stack.java:84)
    at Main.evaluate(Main.java:28)
    at Main.exitTest(Main.java:78)
    at Main.main(Main.java:104)

мне нужна ваша помощь, спасибо всем.

1 Ответ

0 голосов
/ 04 апреля 2020

Чтобы проверить, пуст ли стек, используйте stk.isEmpty ().

Для вычисления извлеките два элемента из стека, выполните вычисления для них, а pu sh - в стек , Например, умножение:

if (ch == '*') {
    stk.push(stk.pop() * stk.pop());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...