我不确定是否提出了正确的问题,但这与我想的差不多。无论如何,我正在尝试制作称为Elevens的纸牌的简化版本。在编译阶段,一切似乎都很好,但是当运行通过时,它并没有按预期运行。以下是与该问题有关的DeckDeckTester类的方法:

注意:我省略了标题和内容

Deck类构造函数和方法之一:

public Deck(String[] suits, String[] ranks, int[] values){
    ArrayList<Card> cardslist = new ArrayList<Card>();
    for(String suit: suits){
        for(String rank: ranks){
            for(int value: values){
                cardslist.add(new Card(suit, rank, value));
            }
        }
    }
    size=cardslist.size();
    cards=cardslist;
}

public List<Card> getDeck(){
    return cards;
}


DeckTester主要方法:

public static void main(String[] args){
    String[] suitsA={"Clubs", "Diamonds", "Hearts", "Spades"};
    String[] ranksA={"Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"};
    int[] valuesA={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
    String[] suitsB={"Lions", "Giraffes", "Wolves"};
    String[] ranksB={"One", "Two", "Three"};
    int[] valuesB={1, 2, 3};
    Deck a = new Deck(suitsA, ranksA, valuesA);
    Deck b = new Deck(suitsB, ranksB, valuesB);
    System.out.println(a.getDeck());
    System.out.println(b.getDeck());
}


这将产生诸如{Ace of Clubs(积分值:1)... Aces Clubs(积分值:13),两个Clubs(积分值:1)等)的数组结果

我希望它能像标准纸牌一样产生。

最佳答案

您有三个嵌套的for循环,因此您将制作suits*ranks*values多张卡片,而只想制作suits*ranks多张卡片。因此:

public Deck(String[] suits, String[] ranks, int[] values){
    ArrayList<Card> cardslist = new ArrayList<Card>();
    for(String suit: suits) {
        for(int i = 0; i < ranks.length; i++) {
            cardslist.add(new Card(suit, ranks[i], values[i]));
        }
    }
    size=cardslist.size();
    cards=cardslist;
}

public List<Card> getDeck(){
    return cards;
}


请记住,传递等级时必须使等级和值相对应,以便正确分配它们并确保它们的长度相同。您可能需要为此添加防护。

希望这可以帮助!

10-07 16:31