我在java中创建了一个PlayingCardDeck
类,它由一个包含PlayingCard
实例的集合支持。我的目标是对不同类型的实际shuffling进行文字模拟。
我编写了一个compareTo
方法,要求甲板的内容(即集合的内容)是唯一的。我还需要集合来维护插入顺序以模拟shuffle
从本质上讲,我认为归结为:
compareTo
函数的重复项才能正常工作pop
顶部的牌是很好的。 但我觉得我可能已经过度复杂了,并且我不知道在哪种情况下使用哪个集合。
对于需要维护插入顺序并禁止重复的集合,是否自然适合? ArraySet
?
答案 0 :(得分:4)
不要使用Set
;使用Collection
最容易编码的内容 - 例如List
(可能是ArrayList
)。
Set
通常用于确保其元素未知时的唯一性(即不是由代码生成)。您可以通过 logic 而不是Collection类型来确保唯一性。但是当一张套牌从卡片中取出时,套装是不合适的。
List
将允许使用Collections.shuffle(List)
来简化随机播放。
与您的问题没有直接关系,但我会为您的Suit
课程的Rank
和Card
使用枚举。使用枚举将教您语言并允许非数字面值(图片卡)的自然排序,并且需要为Ace(高/低)定制排序的位置。
创建一个Hand
类,其中List<Card>
和Deck
类具有Card deal()
方法。这样的事情。一旦完成所有课程和方法,如何将它们全部组合在一起应该是显而易见的。
答案 1 :(得分:3)
我坚持使用ArrayList
。
此外,有许多纸牌游戏允许多个套牌,因此您可能最终需要重复的卡片。