从Java官方教程中坚持卡/甲板练习

时间:2009-01-26 05:41:31

标签: java oop

我坚持使用Java教程的一部分,特别是this exercise。练习要求你:

  

1-编写一个实例的类   代表一张扑克牌   一副牌。扑克牌有两个   区分属性:等级和   适合。一定要保持你的解决方案   你将被要求重写它   枚举类型。

     

提示:你可以使用   断言要检查你的   分配。你写道:

assert(boolean expression to test);  
  

如果布尔表达式为false,您将   收到错误消息。例如,

assert toString(ACE) == "Ace"; 
  

应该返回true,所以不会有错误   消息。

     

2-写一个实例代表一副牌的类。您   也应该保留这个解决方案。

     

3-编写一个小程序来测试您的卡组和卡类。该计划可以   就像创造一副甲板一样简单   卡片和显示卡片。

我真的很想做这个练习,但问题是我从来没有玩过卡片所以我根本不知道如何创建这个程序以及卡应该具有哪些属性等等。我在维基百科上看了这个但知识非常有限,永远不会让我建立所需的类:Card.javaDeck.java和程序DisplayDeck.java

对于不懂卡片的人来说,做什么是一个很好的替代练习,但是会测试与上述练习相同的概念? (可能是静态和实例变量等)

感谢。

顺便说一下,这个不是一个家庭作业问题,我正在学习商业项目的Java。

4 个答案:

答案 0 :(得分:4)

我认为值得花时间熟悉这个例子,因为它经常被用来描述编程概念。让我试着为你提炼扑克牌的描述:

首先,保持牌组(整个牌组)的this picture张开以供参考。

垂直向下排,你有{黑桃♠,钻石◇,俱乐部♣,红心 ♡} = 4 适合

横向移动列,您有{ 2 3 ,..., 10 杰克女王国王王牌} = 13 排名

总的来说,套牌中有4张x 13 = 52张牌。

每张卡片由(排名,套装)对标识,例如(Ace,Spades♠)和(10,钻石◇)我们分别读作“黑桃王牌”和“钻石十”。

答案 1 :(得分:2)

根据上面的描述,它似乎并不需要知道如何来玩牌,只知道它们的外观。如上所述,这意味着Card类将具有2个属性(由Enums定义)rank和suit,其中rank是以下之一:

{ace,2,3,4,5,6,7,8,9,10,jack,queen,king}

诉讼是以下之一:

{黑桃,心,钻石和俱乐部}

甲板只是一个收集级别和套件的组合结构。

答案 2 :(得分:1)

如果您了解一些基础知识,那么练习很简单:

  • 一副纸牌有52张牌(54张如果算上笑话者)
  • 甲板上有4件套装 - 钻石,心形,俱乐部和黑桃
  • 每个套装包含数字卡(2-10),杰克,女王,国王和王牌
  • Ace通常被认为是“1”(但特定游戏的边缘情况很多)

所以,一些简单的测试:

assert(deck.count == 52); assert(deck.suits.count == 4); assert(deck.suits.contains("Diamonds")); assert(deck.suits.contains("Hearts")); assert(deck.suits.contains("Clubs")); assert(deck.suits.contains("Spades")); assert(deck.suits["Diamonds"].contains("Ace")); //repeat for 2-10, Jack, Queen, King

或类似的东西。

答案 3 :(得分:0)

您是否看过playing cards上的维基百科文章?这应该包括你需要知道的关于卡片进行练习的所有内容。基本上卡片的数量从1到13(等级)和四个套装,黑桃,俱乐部,心形或钻石中的一个(但如果你愿意,你可以称它们为A,B,C,D)。 13x4在一副牌中给出52张牌。