Проблеми със стека в конвертор от инфикс към постфикс

Добър ден! Внедрявам конвертор от инфикс към постфикс, използвайки стекове. Работи, когато потребителят въведе инфиксен израз без скоби; но когато присъства скоба, конзолата казва:

Exception in thread "main" StackEmptyException: Stack is empty.
    at ArrayStack.top(ArrayStack.java:85)
    at InfixToPostfix.convert(InfixToPostfix.java:54)
    at InfixToPostfix.main(InfixToPostfix.java:85)


Проблемът ми е в прилагането на ранга (горната част на стека).


person Gyneth Ashtoreth    schedule 14.07.2013    source източник


Отговори (1)


Аха! Имате нужда от "stack peek", когато сравнявате ранга на най-горния... защото "top" трябва да изважда елемента.

Опитайте stack.peek() или еквивалент. Какъв всъщност клас и библиотека използвате за стека? s[top] не е валиден синтаксис.

Обратно при отговор #1, започнах да пиша функция peekRank() за вас, мислейки, че има проблем с проверката, когато стекът е празен... но спрях, когато видях, че имате празна проверка.

Изглежда обаче, че не сте надничали правилно в горната част.


[По-рано #2 -- Не е проблемът]

Обмисляли ли сте ) манипулирането? Вашият ( код изглежда има предпазител за празен стек.

[По-рано # 1-- Не е точно проблемът]

Поставете псевдотокен „ЦЯЛ ИЗРАЗ“ в стека за цялата продължителност на обработката, така че да имате непразен стек или отговорете на ранг, въпреки че няма заобикалящ израз/обграждащ токен.

person Thomas W    schedule 14.07.2013
comment
Мисля, че бутнах и изскочих ( и ) правилно и работи, въпреки че няма ограждащи скоби. Това, с което се затруднявам, е внедряването на върха на стека. (Програмата предполага, че потребителят е въвел правилно израз, т.е. подходящи ограждащи знаци). - person Gyneth Ashtoreth; 14.07.2013