13.1 Deck类
本章的主要目标是创建一个 Deck 类,用来封装一个 Card 对象数组。这个类的初始定义类似于下面这样:
public class Deck {private Card[] cards;public Deck(int n) {this.cards = new Card[n];}}
其中的构造函数将实例变量初始化为一个包含 n 个 Card 对象的数组,但没有创建任何 Card 对象。图 13-1 显示了不包含任何 Card 对象的 Deck 对象是什么样的。

图 13-1:未填充的 Deck 对象的状态图
我们将添加另一个构造函数,让它创建一副标准牌(包含 52 张牌),并用 Card 对象填充它:
public Deck() {this.cards = new Card[52];int index = 0;for (int suit = 0; suit <= 3; suit++) {for (int rank = 1; rank <= 13; rank++) {this.cards[index] = new Card(rank, suit);index++;}}}
这个方法类似于 12.6 节中的示例;我们只是将这个示例转换成了构造函数。现在可以像下面这样来创建一副标准的扑克牌:
Deck deck = new Deck();
创建 Deck 类后,就可将与整副扑克牌相关的方法放在这个类中了。回顾前面编写的方法,应放在这个类中的方法显然是 12.6 节中的 printDeck。
public void print() {for (int i = 0; i < this.cards.length; i++) {System.out.println(this.cards[i]);}}
将静态方法转换为实例方法后,其代码通常会更短。要调用这个实例方法,只需要使用 deck.print() 即可。
