什么是"存储"一个类中的对象?

时间:2016-12-13 04:58:07

标签: java

我正在编写一份Java作业,其中包含:

  

第4章的编程项目讨论了代表标准扑克牌的Card类。创建一个名为DeckofCards的类,它存储Card类的52个对象。包括洗牌的方法,交易卡片,并报告卡片中留下的卡片数量。洗牌方法应该假设你有一个完整的牌组。使用一个主要方法创建一个驱动程序类,该方法从一个洗牌的牌组中处理每张牌,并在处理时打印每张牌。

它说的地方

  

创建一个名为DeckofCards的类,用于存储Card类的52个对象。

我不确定这意味着存储什么。是否意味着在一个类中创建52个对象?或者,假设已经在Card类中创建了52个对象,将所有这些对象放在另一个对象或构造函数中?我确实制作了一个卡片类,但是,我没有制作52个物品,卡片组中也有52张卡片所以我假设52个物品与52张卡片相同。无论如何,如果需要,这是我的卡类的代码:

import java.util.Random;

public class CardClass {

    private static Random generator = new Random();
    private int suit, num;
    private String cardSuit, cardNum;

    public CardClass() {
        shuffle();
    }

    public void shuffle() {
        num = generator.nextInt(13) + 1; 
        suit = generator.nextInt(4) + 1; 
    }

    public String toString() {
        if (num >=2 && num <= 10)
            cardNum = Integer.toString(num);
        else if (num == 1)
            cardNum = "Ace";
        else if (num == 11)
            cardNum = "Jack";
        else if (num == 12)
            cardNum = "Queen";
        else 
            cardNum = "King";

        if (suit == 1)
            cardSuit = "Spades";
        else if (suit == 2)
            cardSuit = "Hearts";
        else if (suit == 3)
            cardSuit = "Clubs";
        else 
            cardSuit = "Diamonds";

        return cardNum + " of " + cardSuit;     
    }
}

这也是我在这个社区的第一次,所以我为我所犯的任何错误道歉,并提前非常感谢你的帮助。

3 个答案:

答案 0 :(得分:2)

这意味着您的DeckOfCards类应包含一个存储Card实例的大小为52的数组。您可以始终使用其他数据结构,如链接列表。该数组应该是DeckOfCards中的私有属性,如

private Card cards[]=new Card[52];

然后用Card对象填充数组:

for(int i=0;i<52;i++){
    int cardType=i/13;
    String type="Heart";
    if(cardType==0)type="Spades";
    else if(cardType==1)type="Clubs";
    else if(cardType==2)type="Diamond";
    cards[i]=new Card(i, cardType);
}

你也可能最好在Stack Overflow中提出编程问题。

答案 1 :(得分:1)

考虑这一点的好方法是将值分配给类的变量(属性)。即使你有多个同一个类的对象,每个类都会有这些变量的随机值,因为你正在使用Random类。

有关使用代码的示例,您可以拥有两个CardClass个对象,因此它们都有cardSuitcardNum个变量,但cardSuit和{{1}两个对象的变量都是不同的,因为它们彼此独立,因为你将值存储到唯一的类对象中。

因此,有了您的问题,似乎您被要求将52个值(构成标准牌组的值)存储到数组中。

答案 2 :(得分:1)

您可能会将某个类视为对象的蓝图。对象始终是类的实例。对象可以包含同一类或不同类的其他对象:

class A {
    private B someInstanceOfB;
}

现在Card类应该只包含套装(球杆,钻石,黑桃和心形)以及值2到10以及J,Q,K和A.(事实上,这是一个理想的情况。使用enum s,但为简单起见,我不会使用它们。)

Deck确实包含52个Card个对象的数组。请注意,您可能不会使用同一张卡两次,因此我们需要有可能从卡片中取出卡片。 ArrayList类允许我们这样做:

class Deck {
    private List<Card> cards = new ArrayList<Card>;
}

(你看到的尖括号是泛型的用法。你稍后会了解它。现在,它意味着ArrayList包含Card类型的对象。)

现在你需要一些东西来填充数组。 Robin的填充数组的方法并不是很好,因为它们的值范围从0到51.相反,你应该使用这样的东西:

class Deck {

    private List<Card> cards = new ArrayList<Card>();

    public Deck() {
        // Let's assume that 0=clubs, 1=diamonds, 2=spades, 3=hearts
        for (int suit = 0; suit < 4; suit++) {
            // For each suit, we add 13 cards with values 1 through 13.
            for (int value = 1; value <= 13; value++) {
                this.cards.add(new Card(suit, value));
            }
        }
        // We did not yet shuffle the cards,
        //but `Collections.shuffle()` can do the job.
    }

    public void dealRandom() {
        // Pick one of the left cards,
        // remove it from the deck
        // and return it.
    }
}

请注意,Card课程不应该对卡片进行随机播放,这是Deck的责任。此外,我们使用整数作为卡片类型(套装)和值的整数。打印用于描述卡的人类可读文本可以委派给toString()方法。