有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组如何修复在Java中打印一副卡片时出现的错误?

我的任务是制作一副卡片,并以多种方式打印出来。但我遇到了一个问题,结果是52张牌乘以4。可能是因为用我的套装阵列声明我的卡obj出现了一些问题,但我不知道如何修复它。有人能帮忙吗

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

问题是在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) 个答案

  1. # 1 楼答案

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

    像这样:

    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());
        }            
    }
    
  2. # 2 楼答案

    您正在实例化一个新的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);