当前位置: 首页 > 面试题库 >

使用2个不同的ENUMS在Java中构建一副纸牌

吴唯
2023-03-14
问题内容

我有一个上课的实验室(我们可以寻求外部帮助)来制作克朗代克单人纸牌。在编程方面,我是个菜鸟(这是我有史以来第一次上编程课)。我们刚刚了解了枚举,我必须使用它们来构建一个平台(我已经查看了有关此问题的其他问题,但是我还没有找到符合我需要的解决方案)。我们有两个枚举(等级和级别):

public enum Rank {
ACE,
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING;}

public enum Suit {    
CLUBS,
SPADES,
HEARTS,
DIAMONDS;}

现在,我需要将它们组合到一个名为Deck的数组中,其形式如下:

public Deck() {
    cards = new Card[52];
}

为了将卡片放入卡座,我一直在尝试使用“ .values”,但我做对了。这个实验室有一个测试代码,它说我没有得到任何要点。我究竟做错了什么?

    public void fill() {
        for (int i = 0; i<52;i++){
        for (Suit s : Suit.values()) {
        for (Rank r : Rank.values()) {
            cards[i]= new Card(r,s);
   }
   }
   }
   }

任何帮助深表感谢。谢谢!


问题答案:

你说

现在,我需要将它们组合到一个名为Deck的数组中,其形式如下:

不,您需要创建一个类Card,其中每个枚举都有一个字段。只有这样做之后,您才能创建卡片组。这样做-
创建一个Card类,至少给它两个字段,每个枚举一个,再加上一个适当的构造函数,再加上getters,再加上一个像样的东西toString(),然后就可以开始了。

另外,这是错误的:

public void fill() {
    for (int i = 0; i<52;i++){ // get rid of this loop
    for (Suit s : Suit.values()) {
    for (Rank r : Rank.values()) {
        cards[i]= new Card(r,s);
}

上面的代码将尝试将52张卡塞入每个索引位置。例如,它将尝试将所有52张卡塞入cards [0]点,与cards
[1]项相同,仅添加最后一张Card。您将拥有52个钻石之王的阵列-这不是您想要的。

取而代之的是,摆脱外部循环,而在循环内部增加i:

public void fill() {
  int i = 0;
  for (Suit s : Suit.values()) {
    for (Rank r : Rank.values()) {
      cards[i]= new Card(r,s);
      i++;  // increment i here
    }
  }
}


 类似资料:
  • 问题内容: 我输入的json数据是此数据(无法从外部资源更改): 我有两个结构将始终匹配数组中的数据: 显然,下面的代码不起作用,但是有可能在顶层(或其他方面)声明类似以下内容的代码: 问题答案: 使用两步过程进行编组。首先,解组一个任意JSON的列表,然后将该列表的第一个和第二个元素解组为各自的类型。 您可以在名为UnmarshalJSON的方法中实现该逻辑,从而实现json.Unmarshal

  • 我想在同一框架中使用2个面板。但是button不起作用了?我该怎么做?我想在一个面板上放几个按钮,另一个面板会做一些其他的事情。

  • 我正在使用AWS-CDK为应用程序构建基础设施。 我有一个构建多个S3存储桶的构造和另一个创建lambda函数从这些存储桶获取数据的构造。 为了能够给我的lambda权限从桶中获取数据,我需要桶ARN。 有没有一种方法,我可以从生产桶的结构导出桶arn,并将其导入lambda结构?

  • 问题内容: 我有2个表,两个表都有自己的自动递增ID,这些ID当然是主键。 当我要创建第三个表以建立这两个表之间的关系时,总是会出现错误。 第一个是关于您只能有1个自动递增的列,第二个是当我从那些2中删除auto_increment语句时发生的,因此由于类型匹配失败,sql不允许我将它们设置为外键。 有没有一种方法可以创建关系表而不丢失自动增量功能? 另一个可能的(但不推荐)的解决方案可能是在第一

  • 使用Gradle从IntelliJ idea运行我的第一个应用程序(Hello world),它运行了,但在控制台中有一个警告“在这个构建中使用了不推荐的Gradle功能,使其与Gradle 6.0不兼容”。我在build.gradle文件中没有依赖项,在那里我可以将编译更改为实现模式?

  • 问题内容: 我有以下代码在PDF内绘制垂直条形图和折线图。 如何将这2个图形保存在PDF的2个不同页面中。我看到可以使用- 但是,不是使用Canvas,而是使用其中 不存在方法的Drawing对象。 如何将2个图形保存在PDF的2个不同页面中?第二个图形(折线图)的右边与第一个图形(垂直条形图)重叠,从而阻碍了该条形图。 这是我的 代码。 问题答案: 制作画布并在其上渲染图形: 希望能帮助到你 :