2012-05-15 42 views
2

的甲板,這是我有如何創建至今卡構造

import java.util.Random; 
public class DeckOfCards 
{ 
public static final int DECK_SIZE = 52; 

//Instance Variables 
private boolean[] deck; //An implicit set of 52 Playing-Cards 
private int cardsInDeck;//Number of cards currently in the deck 
private Random dealer; //Used to rendomly select a card to be dealt 

//Constructor 
public DeckOfCards() 
{ 
     deck = new boolean[52]; 
     for (int j = 0; j<deck.length ; j ++) 
      deck [j] = false; 

我現在去往正確的方向?......我在這之後做什麼?我對布爾型數組不熟悉

+0

還有一個類似的問題在這裏:http://stackoverflow.com/questions/5629130/how-do-i-write-a-constructor-that-initializes-52-card-objects – Leon

+0

布爾數組持有'每個元素上的'false'作爲布爾值的缺省值。 –

回答

3

我自己,我會爲我的套牌變量使用一個Card對象數組,而不是一組布爾值。原始布爾變量只能處於兩種狀態中的一種,即真或假,而卡必須同時具有套裝(四種狀態中的一種)和一種等級(13種狀態中的一種)。

+0

我必須使用布爾值作爲賦值。謝謝 – jorgeAChacon

+2

@ user1166061:你可能想讓我們知道你的任務的細節,然後因爲這個規定讓我困惑。 –

+0

這就是我被要求做的事:所需的表示隱式地存儲卡片;卡從未明確存儲。使用對應於52張紙牌的52個元素的布爾數組。元素值爲true表示相應的卡片在卡組中;值爲假表示相應的卡片已被處理,但不在卡組中。任何套裝中的所有牌都是連續表示的,因此,元素0-12對應於CLUBS,元素13-25對應於DIAMONDS,元素26-38對應於HEARTS,並且元素39-51對應於SPADES。 – jorgeAChacon

1

考慮到分配,您應該在deck陣列中存儲true而不是false。此外,我會把它作爲一個布爾二維數組 - 這個套件的一個維度,以及這個等級的一個維度。

private boolean deck[][] = new boolean[13][4]; 

public DeckOfCards() { 
    for (int rank = 0 ; rank != 13 ; rank++) 
     for (int suite = 0 ; suite != 4 ; suite++) 
      deck[rank][suite] = true; 
} 

boolean containsCard(int rank, int suite) { 
    return deck[rank][suite]; 
} 
+0

我同意這是一個更好的方法,但我認爲它不在任務範圍內(根據OP在評論中所說的內容)。 – twain249

+0

public DeckOfCards() \t { deck = new boolean [52]; for(int j = 0; j jorgeAChacon

+0

@ user1166061不用2-D數組,你可以使用常規數組:你需要在那裏計算數學,但它是可行的。例如,你可以說一張牌'{suite,rank}'在'deck [rank * 4 + suite]'或'deck [suite * 13 + rank]',這並不重要。 – dasblinkenlight

1

根據您的意見,你必須使用一個布爾數組,其中true表示該卡是存在的。

第一點:

所以,當你構建甲板它填充或空?

我認爲它會是滿的,那麼每個細胞的價值應該是什麼?

第二點:

在構造函數中使用:

deck = new boolean[52]; 

這是完全有效的,但你也有

public static final int DECK_SIZE = 52; 

宣佈,所以我會假設你應該使用DECK_SIZE哪裏適用。

第三點:

你有兩個領域:

private int cardsInDeck;//Number of cards currently in the deck 
private Random dealer; //Used to rendomly select a card to be dealt 

未在構造函數初始化(至少在您發佈的部分)

最後一點:

構造函數方法不應該做任何事情,除了設置你的本地字段。所以如果你修復你的deck初始化並初始化你的其他領域,你應該對構造函數有好處。這種情況下的大部分工作將在抽取卡片的功能中完成。

編輯:

要抽一張牌,你必須

  1. 創建一個功能drawACard(),要麼打印出或返回繪製
  2. 隨機選擇從甲板卡的卡(使用隨機發生器dealer)(保存索引)
  3. 檢查卡是否仍然在甲板上(true/false在甲板上應該有幫助)
  4. 一旦你有一個卡,仍然在甲板上你必須在deck設置的位置,以更新的卡定位適當
  5. 您還可以適當地
  6. 現在你有更新cardsInDeck變量您可以從中生成卡的索引。
  7. 既然你現在在甲板上,你可以從單獨的指數,你畫了什麼牌
  8. 確定卡的順序一旦你有相應的字符串像"Ace of Clubs"你可以做任何你需要與

所以你的實現的主要部分將是如何改變你有index=5的東西到String"Six of Clubs"

+0

所以即時只是在構造函數中初始化實例變量,而在其他方法中,我將不得不使用布爾數組實際創建它? – jorgeAChacon

+0

創建什麼?您應該初始化構造函數中的所有字段,然後在其他方法中使用它們。您必須在其他方法中創建的唯一東西是您需要執行該方法所需的任何局部變量。你不應該用其他方法初始化你的領域。 – twain249

+0

好吧,所以當我在構造函數中初始化了我的布爾數組後,我將52個布爾值設置爲true。我的問題是,如何使用我剛剛創建的布爾值創建卡片套牌 – jorgeAChacon