来自Java官方教程的Stuck on Card/Deck练习

问题描述 投票:0回答:5

我陷入了 Java 教程的一部分,特别是这个练习。该练习要求您:

1- 编写一个类,其实例 代表一张扑克牌 一副纸牌。扑克牌有两种 区分属性:等级和 套装。请务必将您的解决方案保留为 你会被要求重写它 枚举类型。

提示:您可以使用 断言语句来检查你的 作业。你写:

assert(boolean expression to test);  

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

assert toString(ACE) == "Ace"; 

应该返回true,这样就不会出现错误 留言。

2- 编写一个类,其实例代表一副完整的牌。你 也应该保留这个解决方案。

3-编写一个小程序来测试你的牌组和纸牌类别。该程序可以 就像创建一副牌一样简单 卡片并展示其卡片。

我真的很想做这个练习,但问题是我从来没有玩过纸牌,所以我根本不知道如何创建这个程序以及纸牌应该具有什么属性等。我在维基百科上查找了这个,但得到了知识非常有限,这永远无法让我构建所需的类: Card.javaDeck.java 和程序 DisplayDeck.java.

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

谢谢。

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

java oop
5个回答
4
投票

我认为值得花时间熟悉该示例,因为它经常用于描述编程概念。让我尝试为您提炼出扑克牌的描述:

首先,将牌组(整个卡片集)的这张图片保持打开以供参考。

垂直向下走,你有 {黑桃 ♠、方块 ◇、梅花 ♣、红心 ♡} = 4 花色

水平穿过各列,您有 {23、...、10JackQueenKingAce} = 13 ranks

一副牌总共有 4 x 13 = 52 张牌。

每张牌都由一对

(等级、花色) 来标识,例如(Ace,黑桃 ♠)和(10,方块 ◇),我们分别读作“黑桃 A”和“方块 10”。


2
投票
根据上面的描述,似乎并不需要知道

如何打牌,只需要知道它们的外观即可。正如您上面提到的,这意味着 Card 类将具有 2 个属性(由枚举定义)等级和花色,其中等级是以下之一:

{ A、2、3、4、5、6、7、8、9、10、J、Q、K }

西装是以下之一:

{ 黑桃、红心、方块和梅花 }

套牌只是一个集合结构,包含等级和套件的所有组合。


1
投票
如果您了解一些基础知识,练习就足够简单了:

    一副牌有 52 张牌(如果算上小丑则为 54 张)
  • 一副牌包含 4 种花色 - 方块、红心、梅花和黑桃
  • 每种花色包含数字牌(2-10)、一张 J、一张 Q、一张 K 和一张 A
  • 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



或者类似的东西。



0
投票
初始化一副牌

花色 = ['红桃', '方块', '梅花', '黑桃'] 排名 = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '杰克', '女王', '国王' ,‘艾斯’] Deck = [{'suit': 西装, 'rank': 排名} forsuits insuitsforranking]

洗牌组

随机洗牌(牌组)

向画面发牌

tableau = [[] for _ in range(7)] 对于范围 (7) 内的 i: 对于范围 (i, 7) 内的 j: tableau[j].append(deck.pop(0))

显示画面

对于表格中的行: print([card['rank'] + ' of ' + card['suit'] for card in row])

    
© www.soinside.com 2019 - 2024. All rights reserved.