2012-12-18 145 views
0

所以我在Java編碼21點和我存儲在枚舉通過枚舉循環作爲參數

public enum Suit 
{ 
    spades, hearts, clubs, diamonds 
} 



public enum Rank 
{ 
    two, three, four, five, six, seven, eight, nine, ten, jack, queen, king, ace 
} 

我的西服,等級值我有一個甲板類保持「卡」的堆棧。 牌包含西裝和等級領域。

public class Card 
{ 
    static Suit suit; 
    static Rank rank; 


    Card(Suit suit, Rank rank) 
    { 

    this.suit = suit; 
    this.rank = rank; 

    } 


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

    //getters and setters ommitted 
} 

在橋面的構造應通過各每種花色和等級,並通過這些作爲參數來創建的52張撲克牌進行迭代,但它似乎被卡住每個最後的價值觀和我結束了與52''俱樂部'。我不明白爲什麼,因爲西裝和級別似乎打印正確,它似乎只是當他們作爲參數傳遞,以添加(),他們行爲不端。

public class Deck 
{ 
    static Stack<Card> d = new Stack<Card>(); 

    Deck() 
    { 
    if (!d.isEmpty()) 
    { 
     clear(); //Empties the stack if constructor is called again 
    } 

    for (Suit suit : Suit.values()) 
    { 
     for (Rank rank : Rank.values()) 
     { 
     //System.out.println(suit + " " + rank); 
     //This seems to print the right values 

     add(new Card(suit, rank)); //These are stuck on 'clubs' and 'ace' 
     } 
    } 

    System.out.println(d); 

    shuffle(); //Method which shuffles the deck 

    } 

    public static void add(Card c) 
    { 
    d.addElement(c); 
    } 

    //shuffle(), clear() and other methods omitted 
} 

整個項目上可以看到github,有沒有什麼幫助。

+2

確保您瞭解什麼是靜態變量。你似乎誤解了他們(這是你問題的原因)。 – goat

回答

4

你的西裝和卡片領域不應該是靜態的!

也不應該你的甲板領域!

靜態字段爲每類,所以您的卡片構造函數爲每次調用時都會覆蓋相同的值。

0

這是不正常的。您可以從Stack延長Deck

public class Deck 
{ 
    static Stack<Card> d = new Stack<Card>(); 

在這種情況下,你可以從收藏addclearshuffle直接在Deck調用。

public class Deck extends Stack<Card> { 
    //add, clear are already there from Stack 
} 
0

您可以在枚舉上調用values()方法。

for ((Rank rank : Rank.values()) { 
    // do what you want 
} 

此值()方法被隱式由編譯器聲明。所以它沒有在Enum文檔中列出。