【问题标题】:What does it mean to "store" objects in a class?在类中“存储”对象是什么意思?
【发布时间】:2019-02-21 04:19:02
【问题描述】:

我正在做一个 Java 家庭作业,上面写着:

第 4 章的编程项目讨论了代表标准扑克牌的 Card 类。创建一个名为 DeckofCards 的类,该类存储 Card 类的 52 个对象。包括洗牌、发牌和报告牌组中剩余牌数的方法。洗牌方法应该假设你有一副完整的牌组。使用 main 方法创建一个驱动程序类,该方法处理洗好的牌组中的每张牌,并在发牌时打印每张牌。

上面写着

创建一个名为 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;     
    }
}

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

【问题讨论】:

    标签: java


    【解决方案1】:

    这意味着您的 DeckOfCards 类应该包含一个大小为 52 的数组,用于存储 Card 实例。您始终可以使用其他数据结构,例如链表。该数组可能应该是 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 中提问编程问题。

    【讨论】:

      【解决方案2】:

      考虑这一点的一个好方法是为类的变量(属性)赋值。即使您有同一个类的多个对象,由于您使用的是Random 类,因此每个类都会对这些变量有自己的随机值。

      对于使用您的代码的示例,您可以有两个 CardClass 对象,因此它们都有 cardSuitcardNum 变量,但 cardSuitcardNum 变量对于这两个对象将是不同的,因为它们'彼此独立,因为您将值存储到唯一的类对象中。

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

      【讨论】:

        【解决方案3】:

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

        class A {
            private B someInstanceOfB;
        }
        

        现在Card 类应该只包含花色​​(梅花、方块、黑桃和红心)和值 2 到 10 以及 J、Q、K 和 A。(事实上,这是使用 @ 的理想情况987654323@s,但为了简单起见,我不会使用它们。)

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

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

        (您看到的尖括号是泛型的用法。稍后您将了解它。目前,它表示包含Card 类型的对象的ArrayList。) p>

        现在你需要一些东西来填充数组。 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()方法。

        【讨论】:

        • 当声明 private List&lt;Card&gt; cards = new ArrayList&lt;Card&gt;(); 时编译器说“找不到符号 - 列表”,非常感谢您的详细帖子。
        • 好吧,当然你需要导入合适的类。这两个类都可以在java.util 包中找到。顺便问一下,你用的是哪个编辑器?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        相关资源
        最近更新 更多