2015-04-02 59 views
0

我刚刚开始学习Java - 我的学习资源是:Deitel Java:如何编程。为什么这个数组构造了两次?

请看看这段代码:

1 public class DeckOfCards 
2 { 
3  private Card[] deck; // array of Card objects 
4  private int currentCard; // index of next Card to be dealt (0-51) 
5  private static final int NUMBER_OF_CARDS = 52; // constant # of Cards 
6  // random number generator 
7  private static final Random randomNumbers = new Random(); 
8 
9  // constructor fills deck of Cards 
10 public DeckOfCards() 
11 { 
12 String[] faces = { "Ace", "Deuce", "Three", "Four", "Five", "Six", 
13 "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" }; 
14   String[] suits = { "Hearts", "Diamonds", "Clubs", "Spades" }; 
15  
16   deck = new Card[ NUMBER_OF_CARDS ]; // create array of Card objects 
17   currentCard = 0; // set currentCard so first Card dealt is deck[ 0 ] 
18  
19   // populate deck with Card objects 
20   for (int count = 0; count < deck.length; count++) 
21    deck[ count ] = 
22    new Card(faces[ count % 13 ], suits[ count/13 ]); 
23  } // end DeckOfCards constructor 

我的问题是,我不明白为什么程序构造平台阵列的两倍?

第一次(第16行),它可以像程序描述的那样(创建卡对象数组),但为什么第二次(第21-22行)?将不是一个程序员只需使用此表达式,而不使用new,像这样:

deck[ count ] = Card(faces[ count % 13 ], suits[ count/13 ]); 

,这是如果需要,卡类:

public class Card 
{ 
    private String face; // face of card ("Ace", "Deuce", ...) 
    private String suit; // suit of card ("Hearts", "Diamonds", ...) 

    // two-argument constructor initializes card's face and suit 
    public Card(String cardFace, String cardSuit) 
    { 
     face = cardFace; // initialize face of card 
     suit = cardSuit; // initialize suit of card 
    } // end two-argument Card constructor 

    // return String representation of Card 
    public String toString() 
    { 
     return face + " of " + suit; 
    } // end method toString 
} // end class Card 

回答

3

否该阵列未被创建两次。它正在创建一次,然后它被填充。

在此声明,程序员创建阵列和分配它向被叫deck参考:

deck = new Card[ NUMBER_OF_CARDS ]; 

在下面的语句,程序员赋值每个部件排列中的

deck[ count ] = new Card(faces[ count % 13 ], suits[ count/13 ]); 

该数组包含Card类型的组件,在此最后一条语句中,程序员正在创建Card类型的对象并将它们分配给数组中的每个组件。

0

第二时间没有构建阵列,而是被用Card对象填充它。

在第16行它实例化了一个数组,但它的对象具有对象的所有默认值>null

deck[ count ] = Card(faces[ count % 13 ], suits[ count/13 ]); 

这行创建一个新卡对象和参照该新创建的对象被存储在deck[count]阵列单元。

+0

为什么e,利用 “新” ??? – 2015-04-02 21:55:33

+0

他使用new来创建一个Card对象,这就是你如何创建一个对象。他将这个新的Card对象分配给数组的一个单元格。 – Alboz 2015-04-02 21:55:48

0

我们只创建一次数组。我们第一次声明一个数组,但数组中的每个单独条目都是null,第二次我们将数组中的每个条目分配给一个卡对象。

0

在线路16上的“程序员”,这实际上是该书的作者,

deck = new Card[ NUMBER_OF_CARDS ]; 

正在初始化一个数组与静态变量NUMBER_OF_CARDS的值的长度为52 第21行22作者不初始化数组,而是初始化数组内的元素,这些元素是Card类型的对象。

deck[ count ] = new Card(faces[ count % 13 ], suits[ count/13 ]); 

PS我爱这本书

相关问题