Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 后缀表示法中的EmptyStackException_Java_Exception_Postfix Notation - Fatal编程技术网

Java 后缀表示法中的EmptyStackException

Java 后缀表示法中的EmptyStackException,java,exception,postfix-notation,Java,Exception,Postfix Notation,当我尝试运行后缀表达式时,我得到一个EmptyStackException,因为我的字符串有两个背对背的操作数。我不知道如何在堆栈中捕获它。任何想法或想法都将受到赞赏 import java.util.Stack; import java.util.Queue; public class postFixCalc extends Program2Test{ static Program2Test<Integer> calcStack = new Program2Test<

当我尝试运行后缀表达式时,我得到一个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条件

我可能没有抓住要点,但这不是简单的尝试{…}捕获EmptyStackException e{…}的问题吗?无论您希望在哪里处理错误?