堆栈(数组索引超出范围)

时间:2018-04-15 03:53:16

标签: java arrays stack indexoutofboundsexception

所以我已经创建了这个堆栈程序,我创建了几个方法,包括poppushisEmpty。堆栈的大小是10.因此,当我按下10个以上的元素时,它会显示错误

  

堆栈已满

它应该做什么。但是,它给出了

  

数组索引超出界限

当我尝试使用POP方法超过10次时出现

错误。如何防止它出错。

这里是整个代码

class Stack {

    final int MAX_SIZE = 10;
    int top;
    //int myVal = top;
    int[] stack;

    public Stack()
    {
        top=-1;
        stack = new int[MAX_SIZE];
        //stack[0] = top;
    }

    public void push(int item)
    {
        if (top == MAX_SIZE-1){ //stackIsFull
            System.out.println("Stack is full");
            return;
        }
        else{
            this.top++;
            //System.out.println(this.top);
            stack[this.top] = item;
            System.out.println(item + "at index" + this.top);
        }

    }

    public int pop()
    {
        if(top!= MAX_SIZE-1){//(top==-1){
        System.out.println("Stack is empty");
        return -1;
        }
        return stack[top];

    }

    public void peek()
    {
        System.out.println(stack[top] + "at index" + top);
    }

    public boolean isEmpty()
    {

        //return top == -1;

        if (top != MAX_SIZE-1){//(top == -1){
            return true;
        }
        return false;


    }

    public void search(int item)
    {
        for (int i=0; i<stack.length; i++)
        {
            if (stack[i] == item){
                System.out.println(item + " at index " + i);
                return;

            }


        }
        System.out.println("error");

    }

2 个答案:

答案 0 :(得分:1)

当您的pop方法第10次删除elemenths时,top将等于0.在第11次调用pop时,if条件不会是{{ 1}}和true将减少为-1。你试着top。数组不能有负索引。因此,您可以从债券错误中获得数组索引。

尝试类似这样的内容

return stack [-1]

请记住,如果你将-1推到堆栈,你的代码将假设堆栈为空,同时弹出该元素

答案 1 :(得分:0)

修正了pop方法

public int pop()
{
    if(top==-1){//(top==-1){
    System.out.println("Stack is empty");
    return -1;
    }
    top = top - 1;
    if (top<0){
        return top;
    }
    return stack[top];




}