如何消除java.lang.NullPointerException?

时间:2014-04-26 17:04:50

标签: java

它一直显示空指针以及数组超出范围的异常:

public class Intopost {
    int top = -1;

    public void intopost() {
        int i;
        Stack stack = new Stack(20);

        String s1 = "b*b-4*m*c";
        String s2 = " ";
        int top = -1;
        System.out.println("your infix string is" + s1);
        for (i = 0; i < s1.length(); i++) {

            if (s1.charAt(i) == '*' || s1.charAt(i) == '-') {
                if (top == -1) {
                    stack.push(s1.charAt(i));
                    top++;
                } else {
                    if (stack.peek() == '*' && s1.charAt(i) == '-') {

                        while (top != -1) {
                            s2 += stack.pop();
                        }
                        top = -1;
                    } else {

                    }
                    stack.push(s1.charAt(i));

                }

                if (i == (s1.length() - 1)) {
                    while (top != -1) {
                        s2 += stack.pop();
                    }
                    top = -1;

                }

            } else {
                s2 += s1.charAt(i);
                if (i == (s1.length() - 1)) {
                    while (top != -1) {
                        s2 += stack.pop();
                    }
                    top = -1;

                }

            }

        }
        System.out.print("the postfix string is" + s2);
    }

    public static void main(String args[]) throws IOException {
        Intopost in = new Intopost();

        in.intopost();

    }

    class Stack {
        int maxSize;
        char[] sa;

        public Stack(int max) {
            maxSize = max;
            sa = new char[maxSize];
            top = -1;
        }

        public void push(char a) {
            sa[++top] = a;
        }

        public char pop() {
            return sa[top--];

        }

        public char peek() {
            return sa[top];
        }

    }

}

你能告诉我这里的错误是什么导致我在这个程序中一直给出null异常错误?

2 个答案:

答案 0 :(得分:0)

你有多个增加和减少顶部的问题,你显然用它来查看你在堆栈中的位置。你在你创建的堆栈中也有顶部,它在那里看起来是正确的,但在你的其他代码中,你正在检查从未在以下地方检查的本地顶部:

while(top!=-1) {
    s2+=stack.pop();
}

答案 1 :(得分:0)

我仍然不明白为什么要实现自己的堆栈。如果您打算继续使用堆栈实现,它应该像语言提供的堆栈一样,如果您调用pop并且堆栈为空(即top是负值),则抛出异常。

  public char pop() {
     if (top >= 0) {
        return sa[top--];
     }
     throw new EmptyStackException();
  }

我强烈建议您使用Stack类 http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html或者至少实施你的行为方式。