无法找出堆栈中的ArrayIndexOutofBoundsException错误(推送)

时间:2019-11-25 16:22:16

标签: java arrays stack

我正在创建一个堆栈程序,并在尝试推送时遇到此错误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

1 个答案:

答案 0 :(得分:0)

在初始化ArrayBaseStack类时,inputArrNum为空,因此此行:

private int stackArr[] = new int[inputArrNum];

创建一个大小为0的新数组。

您应该更改ArrayBaseStack,使其构造函数采用数组大小​​,然后在执行任何其他操作之前初始化数组。这将阻止您当前获得的ArrayIndexOutOfBoundsException。例如

...
public ArrayBaseStack(int size) {
   stackArr[] = new int[size];
}
...