2012-02-01 93 views
1

我正在閱讀一本關於Java的書,到目前爲止我已經瞭解了它的大部分內容。不過,我碰到了一些我似乎無法弄清楚的代碼。這是從一個簡單的21點遊戲:學習Java-Confused關於一些代碼

public class CardDeckTest { 

    public static void main(String args[]) { 
     CardDeck deck = new CardDeck(); 
     System.out.println("Deck Listing:"); 
     deck.list(); 
     Card card = deck.deal(); 
     System.out.println("Dealt " + card); 
     card = deck.deal(); 
     System.out.println("Dealt " + card); 
     System.out.println("Top index: " + deck.getTopIndex()); 
     deck.reset(); 
     System.out.println("Reset deck... Top index: " + deck.getTopIndex()); 
     card = deck.deal(); 
     System.out.println("Dealt " + card); 
     System.out.println("The last card is " + deck.getCard(deck.getNumCards() - 1)); 
    } 
} 

混亂的線我是在它Card card = deck.deal();到目前爲止,我已經看到了線類似於第二個,用「新」。這條線是幹什麼的?爲什麼在那裏沒有「新」。

我相信這是指這CardDeck

public Card deal() { 
     Card dealt = cards[top]; 
     top ++; 
     if (top >= cards.length) reset(); 
     return dealt; 
    } 

謝謝!

回答

2

它調用CardDeck的特定實例的交易方法,並返回存儲在本地變量卡中的卡實例。這有幫助嗎?

+0

是的,這有很大的幫助。謝謝! – Vecta 2012-02-01 21:02:42

2

deal()返回Card例如,你可以在該行

return dealt; 

Card實例在分配給card看到的方法。

0

甲板已經在代碼頂部分配了卡片對象。這種方法只是返回一個對甲板上頂牌的引用,然後遞增甲板的頂部。這樣可以防止在隨後的調用中重新繪製卡。當頂部超出甲板限制時,它會重置頂部,以便您可以再次抽取卡片。

0

Card已在cards[top];它已經創建。下面的行導致命名Card類型的card引用它變量:

Card card = deck.deal(); 

在Java中,許多變量可以參考至相同的對象。僅僅因爲你聲明的引用,並不意味着你需要一個new對象:

Deck gameDeck = new Deck(); // same deck 

Deck bobDeck = gameDeck; 
Deck aliceDeck = gameDeck; // two players 
0

Card card = deck.deal() 

是分配Card對象將變量「卡」。當你看到的「新」像實例:

CardDeck deck = new CardDeck(); 

它只是分配一個CardDeck對象變量「甲板」。

兩者之間的主要區別是您正在創建一個不存在的新CardDeck對象,並將其分配給變量「deck」。對於deck.deal()你正在某處存在卡對象,並將其分配給「卡」

希望幫助

+0

更詳細地看,看起來該函數(這是一個受過教育的猜測)deck.list()或構造函數可能會創建屬於卡組的一部分的卡,所以這個函數將只讀取已經存在的卡對象甲板的一部分 – jeffchong07 2012-02-01 20:50:26

1

CardDeck類維護卡的陣列,推測可能以隨機順序。

當你的代碼撞擊行:

Card card = deck.deal(); 

它調用成員函數來獲取數組中的下一張牌,並提出甲板指針下一張卡片。

的功能,適當的評論:

public Card deal() { 
     Card dealt = cards[top]; // get card from top (initially 0). 
     top ++;      // advance top so next time we get next card. 
     if (top >= cards.length) // deck empty, then reshuffle. 
      reset(); 
     return dealt;    // give card to caller. 
    } 
1

必須有一個new的地方,我猜,當你調用

new CardDeck() 

它是創建cards[]和填充內容。因爲數組中的Card已經創建,所以不需要創建新的,而只需聲明對其的引用即可。