如何修复Java中打印一副纸牌的错误?

时间:2019-04-20 04:21:44

标签: java arrays loops

我正在分配一个卡片组并以多种方式打印出来。但是我遇到的问题是结果是52张卡x 4倍。在用我的西服数组声明我的卡片obj时可能存在一些问题,但我不知道如何解决。有人可以帮忙吗?

因此,基本上,我制作了一个Card类,其中包含牌的价值/或等级,西服和脸部(在卡上显示的内容)。然后是一个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张卡片

2 个答案:

答案 0 :(得分:0)

您要实例化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);

答案 1 :(得分:-1)

一切都很好,只是您在错误的地方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());
    }            
}