我创建了一个堆栈。
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)
答案 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]