【问题标题】:How to fix an error printing a deck of cards in Java?如何修复在 Java 中打印一副纸牌的错误?
【发布时间】:2023-03-30 00:51:01
【问题描述】:

我的任务是创建一副卡片并以多种方式打印出来。但是我遇到了一个问题,结果是 52 张卡 x 4 次。用我的套装数组声明我的卡片 obj 可能存在一些问题,但我不知道如何解决它。有人可以帮忙吗?

所以基本上我制作了一个卡片类,其中包含卡片/或等级、花色和面的值(卡片上打印的内容)。然后是一个 Deck 类,它创建一个包含 52 张卡片的数组,并添加一个 shuffle 方法。目标是在洗牌前后打印卡片。

问题出在 Deck 类中,我的构造函数循环似乎很奇怪,它打印出 x4 的结果。我已经尝试移动了一些但不起作用。

public Deck() {
    for (int i = 0; i<c.length;i++) {
        for (int j =0; j<suit.length;j++) {
            for (int k =0; k<face.length;k++) {
                s = suit[j];
                f = face[k];
                switch(f) {
                    case "2": v=2; break;
                    case "3": v=3; break;
                    case "4": v=4; break;
                    case "5": v=5; break;
                    case "6": v=6; break;
                    case "7": v=7; break;
                    case "8": v=8; break;
                    case "9": v=9; break;
                    case "10": v=10; break;
                    case "Queen": v=11; break;
                    case "Jack": v=11; break;
                    case "King": v=11; break;
                    case "Ace": v=12; break;
                }
                c[i] = new Card(v,s,f);
                System.out.println(c[i].toString());
            }
        }
    }            
}

预期结果:洗牌前后显示 52 张牌

【问题讨论】:

  • 您应该在您的问题中添加相关的语言标签。

标签: java arrays loops


【解决方案1】:

您正在实例化一个新的Card 实例face.length * suit.length * c.length 次。为什么要遍历 c 数组?如果您想为每张卡片创建一张并将其存储在 c 中,请执行以下操作:

int i = 0;
for (var suit : suits)
    for (var face : faces)
        c[i++] = new Card(suit, face);

【讨论】:

  • 哦,我也忘记复制了,c 是 Card 类的数组实例 - 或一副牌,52 张卡片的长度为 52
  • 好的,但是如果您尝试创建 52 个卡片实例,则没有理由迭代该数组。
【解决方案2】:

一切都很好,只是你在错误的地方initializing new card

像这样:

public Deck() {
    for (int i = 0; i<c.length;i++) {
        for (int j =0; j<suit.length;j++) {
            for (int k =0; k<face.length;k++) {
                s = suit[j];
                f = face[k];
                switch(f) {
                    case "2": v=2; break;
                    case "3": v=3; break;
                    case "4": v=4; break;
                    case "5": v=5; break;
                    case "6": v=6; break;
                    case "7": v=7; break;
                    case "8": v=8; break;
                    case "9": v=9; break;
                    case "10": v=10; break;
                    case "Queen": v=11; break;
                    case "Jack": v=11; break;
                    case "King": v=11; break;
                    case "Ace": v=12; break;
                }
            }
        }
        c[i] = new Card(Integer.pareInt(s),s,f);
        System.out.println(c[i].toString());
    }            
}

【讨论】:

  • 亲爱的选民,我的解决方案有什么问题?这样我就可以修复它。
  • 嗨,我忘了复制它的上半部分,以为这些行已经足够了,哈哈,我已经声明了变量 v 所以 parseInt 不是那个(我试过了,但你不工作)。我的输出再次显示了 52 张牌,但有些是 x4 的,也许是西装,但我知道我如何才能正确地订购它。
猜你喜欢
  • 2023-01-11
  • 2017-08-24
  • 2012-06-07
  • 2014-02-27
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多