2013-10-07 47 views
0

我正在嘗試製作一個簡單的21點應用程序,以便我可以練習從Java書籍中學到的東西。Java:聲明一堆卡片的最佳方式

這個「項目」永遠不會被部署,也不是「重要的」,只是爲了讓我學習,牢記這一點,您認爲我最好的方式來存儲這些卡片?

我的選擇似乎是簡單的數組,雙維數組,hashmap和arraylist。

一旦我得到我的卡在我的收藏,我想我會建立方法是:

shuffleDeck() - 自我解釋
removeCardsFromDeck() - 因此,這些卡是「拿來主義」的遊戲
mergeNumberOfDecks(int howMany) - 要合併多少副牌(例如:0或2或4或8)

記住這一點,您認爲最容易處理: 簡單數組,雙維數組,hashmap或arraylist?

+3

你應該考慮和評估你的四種可能性的優點和缺點。例如,你打算如何「洗牌」一個「HashMap」,鍵和值是什麼?你將如何從「簡單數組」中移除卡片?等 – dcsohl

+0

我不明白'mergeNumberOfDecks'的接口。爲什麼它只需要整數?用2調用它後會發生什麼? –

+0

@dcsohl,我只是在學習這個東西,它看起來有點過分,因爲他們有太多的信息供我消化,所以我來問這裏,因爲我確信這已經解決了100次。 tieTYT,它應該採取這些集合中的兩個,並將它們合併在一起... – Ryan

回答

2

在你列出的選項中,List可能是最有意義的,因爲它很容易處理,並且在洗牌後保持你的牌組順序。

除非您真的想自己實現它們,否則您提到的三種方法已經實現。

shuffleDeck():Collections.shuffle(List)

removeCardsFromDeck():

  • 對於單卡,你可以使用Collection.remove(對象)和相關方法(例如,List.remove(INT指數)或LinkedList.removeFirst()/LinkedList.removeLast()Stack.pop())請注意,雖然我包含Stack作爲示例,但除非需要同步,否則您可能不想使用它。
  • 支持多卡,你可以使用Collection.removeAll(Collection)

mergeNumberOfDecks():沒有一個exact模擬,但Collection.addAll(Collection)將使您的工作很容易

記住,列表繼承所有收集的的方法和實現List的任何類必須定義所有List方法的實現(包括那些從Collection繼承的方法)

+0

謝謝,在谷歌上查找Java列表,我只會遇到我發佈的4種方式。 – Ryan

+1

爲了澄清,'List'是'ArrayList'和'LinkedList'(等等)實現的接口。 – rob

+0

謝謝你們,你們倆都很棒,所以你們倆都會高興,不知道哪個選擇是「正確的答案」,因爲兩者都很棒,所以我會選擇一個先回答問題的人。再次感謝! – Ryan

4

通過使用Deque可以最好地解決大多數堆棧/卡組的情況。 List和Queue方法,也是一個集合,因此您可以執行以下操作。

洗牌:由Collections.shuffle(List)完成(如果你選擇的雙端隊列也實現列表)查看LinkedList作爲一個例子

取出卡片: - 理想的頂級卡,deque的具有removeFirst()

合併:java.util.collectionaddAll(Collection)(所以任何實現集合的類有這種方法)

+0

我還沒有來到「Deque」,我想這在我的書中有更進一步的瞭解:)感謝您的鏈接!我正在查找的方法,我沒有看到任何方式來洗牌,雖然...我錯過了什麼? – Ryan

+0

請注意'Deque'只是接口,Shuffle使用一個也實現'List'的類,那麼你可以使用'Collections.shuffle(List)' –

+0

謝謝你們,你們倆都很棒,所以你們倆都會讚不絕口,因爲兩者都很好,所以我不會真正知道哪個選擇是「正確答案」,所以我會選擇首先回答的人。再次感謝! – Ryan