我创建了一个运行堆栈的类。但是,当我运行主类时,它会产生运行时错误。该类像堆栈一样运行但是当输入的数字超过堆栈大小时,它应该调用一个复制数组的方法,为堆栈添加更多大小。
线程“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);
}
}
答案 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的空格。