2012-04-26 95 views
0

因此,爲了設計流行的紙牌遊戲「UNO」,我遇到了一個問題,如果用戶輸入(-1)從甲板上抽出一張牌並將其放入手中,即時運行轉換爲ArrayIndexOutOfBoundsException。現在我知道這是因爲數組中的另一個元素沒有被創建,但我不知道在這種情況下如何去做。遊戲UNO java代碼設計

這裏是我的addCardToHand方法的代碼:

public void addCardToHand(Card c) 

    { 
     this.cards[this.cardCount] = c; 
     this.cardCount++; 
    } 

這種方法intially適用於獲得玩家每5張牌,但僅此而已,我已經能夠做到。它由另一個類中的另一個方法調用,該類從「deck的頂部」生成Card對象參數。接下來我該做什麼?

+1

'這個有多大?卡陣列?當它需要更多空間時,您是否調整它大小? – mellamokb 2012-04-26 23:30:06

+0

這就是我想我需要做的,但我不知道如何添加另一個元素!它正在被初始化爲5,這是在遊戲開始時人們持有多少張牌 – 2012-04-26 23:35:52

回答

2

請記住,簡單的數組並不像ArrayList那樣動態,因爲它們不會自動調整大小以容納更多條目。您可以使用ArrayList,也可以創建一個大於this.cards的新陣列,並將所有值複製到其中(包括您添加的新的Card),之後您將發出語句this.cards = newArray

+0

是的我試圖避免使用ArrayList,但我認爲複製數組可能會伎倆。 – 2012-04-26 23:38:42

+0

是的,這將工作 - 一個簡單的for循環會做到這一點。 – arshajii 2012-04-26 23:40:30

0

無論何時無法插入新卡,您都可以創建一個兩倍於前一個大小的新陣列。這樣,每次添加卡片時都不需要複製整個陣列。

所以,假設你有一個數組a = [1,2,3],並且你想添加一個新的卡4但是不能。你創建一個新的數組b = new Card [a.length * 2],從數組a中複製先前的值,並將4放在你需要的位置。你最終有一個數組a = [1,2,3,4, - , - ]。在添加3張牌之後,你可以得到一個數組a = [1,2,3,4,5,6,7, - , - , - , - , - ]等。