2013-03-20 35 views
-1
public enum Suit 
{ 
    CLUBS, 
    HEARTS, 
    SPADES, 
    DIAMONDS 
} 

public enum Value 
{ 
    TWO, 
    THREE, 
    FOUR, 
    FIVE, 
    SIX, 
    SEVEN, 
    EIGHT, 
    NINE, 
    TEN, 
    JACK, 
    QUEEN, 
    KING, 
    ACE 
} 

Card.javaJava的邏輯循環//試圖創建卡的甲板

public class Card { 

    private Suit suit; 
    private Value value; 

    public Card(Suit theSuit, Value theValue) 
    { 
     suit = theSuit; 
     value = theValue; 
    } 

    public String toString() 
    { 
     return value + " of " + suit; 
    } 

    public Value getValue() 
    { 
     return value; 
    } 

    public Suit getSuit() 
    { 
     return suit; 
    } 

    public boolean equals(Card other) 
    { 
     if (value.ordinal() == other.value.ordinal() 
       || suit.ordinal() == other.suit.ordinal()) 
     { 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 

} 

CardPile.java

public class CardPile 

{ 
    public Card[] cards; 

    private int numCards; 

    public CardPile() 
    { 
     this.cards = new Card[52]; 
     this.numCards = 0; 

     // The problem is here, when I try to iterate through the enums and the 
     // array to populate my cards[] of 52 objects Card it populates it with 
     // 52 Card which are all ACE of DIAMONDS, it looks like the triple loops 
     // populates 52 times the two last elements of my enum, but I can't 
     // figure out how to fix that! Thanks in advance! 

     for (Suit s : Suit.values()) 
     { 
      for (Value v : Value.values()) 
      { 
       for (int π = 0; π < cards.length; π++) 
       { 
        cards[π] = new Card(s, v); 
       } 
      } 
     } 
    } 

    public boolean isEmpty() 
    { 
     for (int i = 0; i < cards.length; i++) 
     { 
      if (cards[i] != null) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 

    public int getNumCards() 
    { 
     return numCards; 
    } 
} 
+8

你真的用'π'? – sp00m 2013-03-20 17:01:15

+0

我注意到,失蹤for循環這裏之前對(價值:v值())for循環有一個爲(套裝:的價值觀())循環,包裹2個循環!謝謝! – user2058291 2013-03-20 17:01:25

+0

(1)你的for循環在註釋中丟失了,並沒有被格式化爲代碼(2)使用pi丟失了for循環,這是不需要的。 – splungebob 2013-03-20 17:03:41

回答

6

的問題是在這裏:

for (int π = 0; π < cards.length; π++) { 
    cards[π] = new Card(s, v); 
} 

您正在使用相同的sv變量創建Card實例,並將其分配給cards陣列中的所有元件,在每一個(S,V)對組合替換的每個值。

變化,以便在代碼中使用只是第2 for-loop s到填充:

int count = 0; 
for (Suit s : Suit.values()) { 
    for (Value v : Value.values()) { 
     if (count < cards.length) { 
      cards[count++] = new Card(s, v); 
     } 
    } 
} 

順便說一句,你不應該對變量使用的名稱爲π確保縮進代碼。

1

每間套房,你遍歷所有的52張牌的值和設置他們是西裝和價值。由於最後一件套裝/價值對是DIAMOND和ACE,這就是所有卡片最終的結果。

如果你擺脫使用π的循環,而是隻是做:

int counter = 0; 
for (Suit s : Suit.values()) 
{ 
    for (Value v : Value.values()) 
    { 
     cards[counter++] = new Card(s, v); 
    } 
} 

那麼我認爲應該工作。

+0

非常類似於我的回答,除了'if'驗證:)。 – 2013-03-20 17:08:32

+0

我有點慢那裏:)其實,我認爲這是沒有'if'驗證更好,因爲你想知道(有錯誤),如果數組是太短了,沒有它默默地離開有些卡了) – 2013-03-20 17:08:47

+0

對於你的評論:我更喜歡在執行它後更改代碼,而不是在顯示給其他人時發生錯誤和打破整個程序:)。 – 2013-03-20 17:13:32