EmptyStackException в постфиксной нотации - PullRequest
0 голосов
/ 08 октября 2018

Когда я пытаюсь запустить свои выражения postfix, я получаю исключение EmptyStackException из-за того, что моя строка имеет два операнда вплотную.Я не могу понять, как захватить это в моем стеке.Любые мысли или идеи приветствуются.

import java.util.Stack;
import java.util.Queue;

public class postFixCalc extends Program2Test{
    static Program2Test<Integer> calcStack = new Program2Test<>();

    private static int calc1(String exp) {
        Stack<Integer> calc1Stack = new Stack<>();

        for(int i = 0; i<exp.length(); i++) {
            char c = exp.charAt(i);
            if(Character.isDigit(c))
                calc1Stack.push(c-'0');
            else {
                int val1= calc1Stack.pop();
                int val2= calc1Stack.pop();

                switch(c){
                    case '+':
                        calc1Stack.push(val2+val1);
                        break;

                    case '-':
                        calc1Stack.push(val2-val1);
                        break;

                    case '/':
                        calc1Stack.push(val2/val1);
                        break;

                    case '*':
                        calc1Stack.push(val2*val1);
                        break;
                }
            }
        }
        return calc1Stack.pop();
    }
    public static void main(String[] args) {

        // TODO Auto-generated method stub
        String exp = "12+4*5-";     
        System.out.println("Your Answer is: " + calc1(exp));
        String exp2 = "(12*4*1-)/53+";
        System.out.println("Your answer is: " + calc1(exp2));



    }

}

1 Ответ

0 голосов
/ 08 октября 2018

Добавьте это к своему коду, чтобы убедиться, что вы не выталкиваете из пустого стека:

if(!calc1Stack.empty()) {
    int val1= calc1Stack.pop();
}

if(!calc1Stack.empty()) {
    int val2= calc1Stack.pop(); 
} 

А затем обработайте условие else.

...