-1

PlayingCardDeck在java中创建一个类,它由一个包含我的PlayingCard实例的集合支持。我的目标是对不同种类的实际洗牌进行文字模拟。

我编写了一个compareTo方法,它要求卡片组的内容(即集合的内容)是唯一的。为了模拟随机播放,我还需要集合来维护插入顺序

从本质上讲,我认为它归结为:

  • 集合必须排除重复项才能使compareTo功能正常工作
  • 必须保持插入顺序,以便洗牌有效果
  • 能够以pop原子方式打出顶级牌是一件很高兴的事。

但我觉得我可能把这个复杂化了,我不知道在什么情况下使用哪个集合

是否适合需要维护插入顺序并禁止重复的集合?ArraySet?

4

2 回答 2

4

不要使用Set; 使用Collection最容易编写代码的东西——比如 a List(可能是ArrayList)。

ASet通常用于在其元素未知(即不是由您的代码生成)时确保唯一性。您可以通过逻辑而不是 Collection 类型来确保唯一性。但是当要从其中取出卡片时,Set 并不合适。

AList将让使用Collections.shuffle(List)来简化洗牌过程。


与您的问题没有直接关系,但我会为您的Suit班级使用枚举。使用枚举将教您语言并允许对非数字面值(图片卡)进行自然排序,并且需要为 Ace(高/低)放置自定义排序的位置。RankCard

创建一个Hand具有 的类List<Card>,以及一个Deck具有Card deal()方法的类。类似的东西。一旦你完成了所有的类和方法,如何将它们组合在一起应该是显而易见且容易的。

于 2013-06-30T23:06:05.363 回答
3

我会坚持使用ArrayList.

  • 它将保持插入顺序(直到您操纵它)。
  • 它很容易分类。
  • 它很容易被洗牌。

此外,有许多纸牌游戏允许使用多个套牌,因此您最终可能需要重复的纸牌。

于 2013-06-30T23:08:29.680 回答