2012-11-21 77 views
1

我得到一個錯誤:我不知道如何解決堆棧溢出錯誤

Exception in thread "main" java.lang.StackOverflowError 
    at CreateCardDeck.<init>(CreateCardDeck.java:6) 
    at CardStack.<init>(CardStack.java:7) 
    at CreateCardDeck.<init>(CreateCardDeck.java:8) 
    at CardStack.<init>(CardStack.java:7) 
    at CreateCardDeck.<init>(CreateCardDeck.java:8) 
    ... 
    ... 
    ... 
    at CardStack.<init>(CardStack.java:7) 
    at CreateCardDeck.<init>(CreateCardDeck.java:8) 

但我不明白爲什麼會有一個錯誤。在我的代碼中,我指定了大量的卡片等等。那麼這裏的問題是什麼?

public class CreateCardDeck 
{ 
    int deckSize = 52; 
    CardStack cardStack; 

    CreateCardDeck() 
    { 
     cardStack = new CardStack(deckSize); --------------- problem here ----- 
    } 
} 

而且

class CardStack extends CreateCardDeck 
{ 
    public CardStack(int s) ------------ problem here -------------- 
    { 
     maxSize = s; 
     stackArray = new Card[maxSize]; 
     top = -1; 
    } 
...... 
} 
+0

CardStack是否需要擴展CreateCardDeck? – nhahtdh

回答

7

您使用遞歸無意中具有CardStack延伸CreateCardStack。不要在這裏使用繼承。除了導致您的StackOverflowError錯誤,這只是明顯錯誤。 CardStack是而不是 CreateCardStack的一個更專門的版本,所以不應該擴展它。事實上,CardStack根本就不瞭解CreateCardStack。

你遞歸和SO錯誤:

你CardStack構造函數將默認調用父類的構造函數創建一個其他CardStack對象,其構造函數將默認調用父類的構造函數創建一個其他CardStack對象,其構造函數會默認調用super的構造函數,該構造函數創建另一個CardStack對象,其構造函數默認調用super的構造函數,該構造函數創建另一個CardStack對象,該對象的構造函數將默認調用超類的構造函數,該構造函數創建另一個構造函數的CardStack對象......幾乎無限直到內存用完。

+0

這是查看它的好方法。大聲笑 – HelpNeeder

+0

@HelpNeeder:這是看看它的唯一方法。 :) –

1

CardStack從CreateCardDeck繼承。 CreateCardDeck的構造函數實例化一個CardStack,這將導致CreateCardDeck的構造函數被再次調用,等等。

我建議重新安排和重新設計你的代碼。 CreateCardDeck看起來像一個方法的名稱(因爲它以一個動詞開頭)。也許你想要的實際上是一個名爲createCardDeck的CardStack中的靜態方法。