0

我正在尝试制作一个简单的 Blackjack 应用程序,以便我可以练习从我的 Java 书中学到的东西。

“项目”永远不会被部署,也不是“重要”,只是为了让我学习,记住你认为我存储卡片包的最佳方式是什么?

我的选择似乎是简单数组、二维数组、hashmap 和arraylist。

一旦我的卡片进入我的收藏,我认为我将建立的方法将是:

shuffleDeck() - 不言自明
removeCardsFromDeck() - 所以这些卡片被“用于”游戏
mergeNumberOfDecks(int howMany) - 要合并多少副牌(例如:0 或 2 或 4 或 8)

请记住,您认为哪个最容易处理:简单数组、二维数组、hashmap 或 arraylist?

4

2 回答 2

4

大多数堆叠/一副牌的情况最好通过使用来解决Deque。具有 List 和 queue 方法,并且也是一个集合,因此您可以执行以下操作。

Shuffle: Done by Collections.shuffle(List)(如果你选择的双端队列也实现了 List) 看LinkedList例子

移除卡片: - 理想情况下是顶级卡片,Deque 有removeFirst()

合并:java.util.collectionaddAll(Collection)(所以任何实现集合的类都有这个方法)

于 2013-10-07T19:45:03.993 回答
2

在您列出的选项中,aList可能是最有意义的,因为它很容易使用,并且在洗牌后会保持牌组的顺序。

除非您真的想自己实现它们,否则您提到的三种方法已经实现。

洗牌甲板():Collections.shuffle(List)

removeCardsFromDeck():

  • 对于单张卡片,您可以使用 Collection.remove(Object) 和相关方法(例如 List.remove(int index) 或LinkedList.removeFirst()/LinkedList.removeLast()Stack.pop()) 请注意,虽然我将 Stack 作为示例,但您可能不想使用除非您需要同步。
  • 对于多张卡,您可以使用Collection.removeAll(Collection)

mergeNumberOfDecks():没有exact模拟,但Collection.addAll(Collection)会让你的工作变得很容易

请记住,List 继承了 Collection 的所有方法,任何实现 List 的类都必须定义 List 的所有方法的实现(包括那些从 Collection 继承的方法。

于 2013-10-07T19:42:55.913 回答