2013-04-26 83 views
0

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

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

我认为问题出在这个班级内,我不确切地知道我的问题在哪里。我可能是错的,但它可能与我的数组副本。

  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
public void push(int i) 
{ 
    if (top == stack.length-1) 

     extendStack(); 

    else 

     stack[++top]= i; 

} 
+0

此没有解释在所有的空间,显然这是作业任务。 – ThePerson 2013-04-26 17:39:17

0

你的问题是在这里:

public void push(int i) 

{ 
    if (top == stack.length) 

     extendStack(); 

    else 

     stack[++top]= i; 

    } 

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

您还需要更改您的构造函数以使用0而不是-1来启动变量top。

这种方式在使用变量top后会增加。

或者,您可以在if语句中加上一个减号1,使其如下所示: if(top == stack.length -1)。这是因为你的阵列开始于0

尺寸5的阵列将具有空间0,1,2,3,4,但不为5.

+0

如果top设置为从0开始(因为它应该)而不是-1,那么它会正常工作。 – ThePerson 2013-04-26 17:38:48

+0

对不起,没有阅读下一行! :) – 2013-04-26 17:44:12

+0

谢谢你的帮助。我认为我的代码还有其他问题,我必须在这个工作正常之前解决 – user2321685 2013-04-26 18:26:47