每当尝试推入堆栈时,在java空指针异常中都会出错

时间:2017-12-12 11:21:25

标签: java

在此代码中,当用户输入字符串时,它被推入堆栈,如果出现“ - ”则弹出前一个字符串,当堆栈变空时,循环执行停止。
每当我尝试推送堆栈空指针异常就在那里。

import java.util.Scanner;
import java.util.*;

public class StackArray {
    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        StackArrayModel stack = new StackArrayModel();
        while (true) {
            String data = scan.next();
            if (data.equals("-")) {
                if (stack.isEmpty() == false)
                    System.out.println(stack.pop());
                else
                    break;
            } else {
                stack.push(data);
            }
        }
    }
}

// creating resizable array stack
class StackArrayModel {
    String[] s;
    int n = 0;

    public void StackArrayModel() {
        s = new String[1];
    }

    public boolean isEmpty() {
        return n == 0;
    }

    public void push(String item) {
        if (n == s.length) {
            resize(s.length * 2);
        }
        s[n++] = item;
    }

    private void resize(int capacity) {
        String[] copy = new String[capacity];
        for (int i = 0; i < s.length; i++) {
            copy[i] = s[i];
        }
        s = copy;
    }

    public String pop() {
        if (n > 0 && n == s.length / 4)
            resize(s.length / 2);
        String item = s[--n];
        s[n] = null;
        return item;
    }
}

1 个答案:

答案 0 :(得分:3)

错误发生在StackArrayModel级。您没有覆盖默认构造函数,因为您在那里添加了void

public void StackArrayModel(){
    s = new String[1] ;
}

应更改为以下内容,以便覆盖默认构造函数:

public StackArrayModel(){
    s = new String[1] ;
}

一旦你这样做了,你就覆盖了默认的构造函数,你的代码应该可以正常工作。