2013-04-26 69 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

相關問題