0

我犯了一个新手错误,并试图在不重新编码整个程序的情况下找出解决方法。这是场景:

我正在从 52 张卡片组中创建 6 张卡片。这些卡有 2 个字段:int rank 和 char suit。我正在拉一个随机的等级和西装,并为每张牌创建一个新的和未命名的实例。这不考虑重复。

所以我成功地创建了 6 张卡片,但我不想重复。这可能是一个新问题,但我们都去过那里 :) 感谢您的帮助!


public void displayCards(List<ImageView> disp) {
        int cardNumber = 0;
        for (ImageView c : disp) {

            cardNumber++;

            rank = rand(13) + 2;
            int i = rand(4);
            if (i == 0) {
                suit = 's';
            } else if (i == 1) {
                suit = 'h';
            } else if (i == 2) {
                suit = 'd';
            } else {
                suit = 'c';
            }

            if (cardNumber == 1) {
                dc1 = new Card(rank, suit);
            } else if (cardNumber == 2) {
                dc2 = new Card(rank, suit);
            } else if (cardNumber == 3) {
                dc3 = new Card(rank, suit);
            } else if (cardNumber == 4) {
                pc1 = new Card(rank, suit);
            } else if (cardNumber == 5) {
                pc2 = new Card(rank, suit);
            } else {
                pc3 = new Card(rank, suit);
            }}
4

3 回答 3

4

选项 1:使用两个(嵌套)循环(所有套装和所有等级)创建一个包含 52 张卡片的完整套牌(例如,在列表中)。洗牌(使用Collections.shuffle())并拿走六张牌。

选项 2:只需创建您想要的卡片数量(就像您尝试做的那样)。在这里,您需要将每张卡片放入 aSet<Card>中,直到该集合具有所需数量的卡片。本质上,重复项将在集合中消失。为此,您需要实现equals()Cardhashcode()类。

于 2013-08-07T04:26:38.297 回答
2

创建一个包含所有 52 张牌的牌组并从牌组中提取牌。此外,您应该使用枚举器来表示等级和西装。

请参阅我在此 Java 代码中必须比较哪些变量?例如卡片和甲板的代码。

于 2013-08-07T04:23:04.920 回答
1

首先,如果您还没有这样做,请在您的班级中覆盖equals()和。hashCode()Card

其次,将已创建的卡片添加到 a Set(保证它不会包含重复项)

修改您的代码,如下所示:

public void displayCards(List<ImageView> disp) {

    int cardNumber = 0;
    Set<Card> myCards = new HashMap<Card>();
    for (ImageView c : disp) {

        cardNumber++;

        Card newCard;

        do {
            rank = rand(13) + 2;
            int i = rand(4);
            if (i == 0) {
                suit = 's';
            } else if (i == 1) {
                suit = 'h';
            } else if (i == 2) {
                suit = 'd';
            } else {
                suit = 'c';
            }
            newCard = new Card(rank, suit);
        } while(myCards.contains(newCard));

        myCards.add(newCard);


        if (cardNumber == 1) {
            dc1 = newCard;
        } else if (cardNumber == 2) {
            dc2 = newCard;
        } else if (cardNumber == 3) {
            dc3 = newCard;
        } else if (cardNumber == 4) {
            pc1 = newCard;
        } else if (cardNumber == 5) {
            pc2 = newCard;
        } else {
            pc3 = newCard;
        }
    }
于 2013-08-07T04:28:29.847 回答