我正在编写一份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;
}
}
这也是我在这个社区的第一次,所以我为我所犯的任何错误道歉,并提前非常感谢你的帮助。
答案 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
个对象,因此它们都有cardSuit
和cardNum
个变量,但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()
方法。