我正在创建一个堆栈程序,并在尝试推送时遇到此错误ArrayIndexOutofBoundsException
。
它从topofindex
获取main
的值和数据。
当我输入数组大小以使用scanner
时,即使该值为3,它仍然会遇到错误。
public class ArrayBaseStack {
private int topIndex = -1;
private int inputArrNum;
private int inputData;
private int stackArr[] = new int[inputArrNum];
public void push(int inputData) {
this.inputData = inputData;
topIndex++;
stackArr[topIndex] = inputData;
}
public void pop() {
if (isEmpty()) {
}
else {
System.out.println(stackArr[topIndex]);
topIndex--;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayBaseStack arrayBaseStack = new arrayBaseStack();
arrayBaseStack.inputArrNum = sc.nextInt();
for (int i = 0; i < arrayBaseStack.inputArrNum; i++) {
String stackOrder = sc.next();
int data =0;
if(stackOrder.equals("push")){
data = sc.nextInt();
arrayBaseStack.push(data);
}
else if (stackOrder.equals("pop")){
arrayBaseStack.pop();
}
else
System.out.println("Wrong Direction.");
}
结果:
3
push 3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
答案 0 :(得分:0)
在初始化ArrayBaseStack
类时,inputArrNum
为空,因此此行:
private int stackArr[] = new int[inputArrNum];
创建一个大小为0
的新数组。
您应该更改ArrayBaseStack
,使其构造函数采用数组大小,然后在执行任何其他操作之前初始化数组。这将阻止您当前获得的ArrayIndexOutOfBoundsException
。例如
...
public ArrayBaseStack(int size) {
stackArr[] = new int[size];
}
...