0

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

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 5 at IntegerStack.push(IntegerStack.java:26) at 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);
}

 }
4

2 回答 2

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

        extendStack();

    else

       stack[++top]= i;

}
于 2013-04-26T17:36:01.913 回答
0

你的问题在这里:

    public void push(int i) 

{
    if (top == stack.length)

        extendStack();

    else

       stack[++top]= i;

    }

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

您还需要更改构造函数以从 0 而不是 -1 开始变量 top。

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

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

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

于 2013-04-26T17:36:03.610 回答