运行堆栈的运行时错误,这可能是由于数组大小造成的

时间:2013-04-26 17:31:35

标签: java

我创建了一个运行堆栈的类。但是,当我运行主类时,它会产生运行时错误。该类像堆栈一样运行但是当输入的数字超过堆栈大小时,它应该调用一个复制数组的方法,为堆栈添加更多大小。

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:5 在IntegerStack.push(IntegerStack.java:26) 在Lab15.main(Lab15.java:18)

我认为问题出在这个课程中我不知道我的问题究竟在哪里。我可能错了,但可能是我的数组副本。

            import java.util.Arrays;


         public class IntegerStack 

{

private int stack [];
private int top; 


public IntegerStack(int SIZE) 
{
    stack = new int [SIZE];
    top = -1;
}

public void push(int i) 
{
    if (top == stack.length)

        extendStack();

    else

       stack[++top]= i;

}

public int pop() 
{

    return stack[top--];
}

public int peek()
{

    return stack[top];  

}


public boolean isEmpty() 
{
    if ( top == -1)

        return true;
    else    
        return false;

}

private void extendStack()
{

    stack = Arrays.copyOf(stack, 2 * stack.length);
}

 }

2 个答案:

答案 0 :(得分:0)

public void push(int i) 
{
    if (top == stack.length-1)

        extendStack();

    else

       stack[++top]= i;

}

答案 1 :(得分:0)

你的问题在这里:

    public void push(int i) 

{
    if (top == stack.length)

        extendStack();

    else

       stack[++top]= i;

    }

原因是如果top等于堆栈的大小,那么你将计数器递增1然后尝试插入到该位置的堆栈数组中: stack [++ top] = i; 这是不正确的,因为它将是一个高于最大值的位置,因为增量在添加之前。尝试: stack [top ++] = i;

您还需要更改构造函数以将变量top置于0而不是-1。

这种方式是在使用变量top之后的增量。

或者,您可以在if语句中添加减号1,使其如下所示: if(top == stack.length -1)。这是因为您的数组从0开始。

大小为5的数组将包含空格0,1,2,3,4但不包含5的空格。