堆栈实现数组索引超出绑定错误

时间:2018-01-16 20:40:32

标签: java data-structures stack

我创建了一个堆栈。

public class STK {
    static int capacity = 0; 

    STK(int size) {
        capacity = size;
    }

    int stackk[] = new int[capacity];
    int top = 0;

    public void push(int d) {
        if(top < capacity) {
            stackk[top] = d;
            top++;
        } else {
            System.out.println("Overflow");
        }
    } 
}

其实施

public class BasicStackImplementation {
    public static void main(String[] args) {
        STK mystack = new STK(5);

        mystack.push(51);
        mystack.push(23);
    }
}

当我尝试运行此代码时出现错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at STK.push(STK.java:21)
    at BasicStackImplementation.main(BasicStackImplementation.java:6)

2 个答案:

答案 0 :(得分:1)

字段初始值设定项在构造函数之前运行。您的代码等同于:

static int capacity = 0;
int stackk[]=new int[capacity];
STK(int size)
{
    capacity=size;
}

所以你要初始化一个空数组。要修复它,只需在构造函数中初始化stackk

int[] stackk;
STK(int size)
{
    capacity = size;
    stackk = new int[capacity];
}

此外,capacity因实例而异,且不应为static

答案 1 :(得分:0)

当你创建类时,你将类中的数组属性初始化为等于0的容量。所以你的数组初始化为0个元素。

调用构造函数并设置容量值时,需要重新初始化类数组,等于new int [value]