java - Postfix 表示法中的 EmptyStackException

标签 java exception postfix-notation

当我尝试运行后缀表达式时,由于我的字符串有两个背靠背的操作数,因此出现 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));



    }

}

最佳答案

将此添加到您的代码中以确保您不会从空堆栈中弹出:

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

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

然后处理else条件。

关于java - Postfix 表示法中的 EmptyStackException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52694892/

相关文章:

java - 如何检查 Apache POI 中的数字单元格是否为空?

java - 使用当前的库,我将如何为文本字符串制定简单的加密/解密方法?

java - 如何调试 session 范围的 bean?

python - 为什么 asyncio 中的异常迟到或根本不出现?

java - 什么是串行版本 UID?

c++ - 将中缀转换为后缀表示法

java - 错误 : Could not find or load main class Main when trying to run JAR. list 和类路径看起来不错,但仍然不起作用?

java - 如果另一个异常吃掉了它,我应该在顶部异常中保留对原始异常的引用吗?

character - 当中缀表示法中的数字已知时,后缀表示法中的字符数

c++ - 如何从将波兰表示法转换为反向波兰表示法的递归函数返回指针?