2013-08-15 5 views
7

मैं स्ट्रिंग और पूर्णांक को एक साथ परिभाषित करना चाहता हूं लेकिन यह त्रुटियां देता है।जावा एनम, पूर्णांक और स्ट्रिंग एक साथ परिभाषित करते हैं?

public class Card { 
    Rank rank; 
    Suit suit; 
    public Card(Rank rank, Suit suit){ 
     this.rank=rank; 
     this.suit=suit; 
    } 
    public enum Rank { Ace, 9, Queen, King } //and other suits 
} 

त्रुटि टोकन 9 पर एक वाक्यविन्यास त्रुटि है, इस टोकन को हटाएं।

+0

मुझे नहीं लगता कि आप एक enum मूल्य –

+0

एक के रूप में पूर्णांक डाल सकते हैं पूर्णांक जावा में वैध चर नाम नहीं है! –

उत्तर

3

आप एक संख्या के साथ एक enum फ़ील्ड शुरू नहीं कर सकते हैं। NINE का उपयोग करने का प्रयास करें।

8

जावा { Ace, 9, Queen, King } में enum घोषित करने में ये तार और पूर्णांक नहीं हैं। ये enum की वास्तविक वस्तुएं हैं।

आप ऐसा कर सकते हैं:

public enum Rank { 
    Ace(13), 
    Nine(8), 
    //etc 
    ; 

    private int rank; 

    Rank(int rank) { 
     this.rank = rank; 
    } 

    public int getRank() { 
     return rank; 
    } 
} 
+0

'एनम रैंक {ऐस, 9, रानी, ​​किंग};' इस तरह की एक त्रुटि देता है 'टोकन पर सिंटेक्स त्रुटि "9", पहचानकर्ता अपेक्षित' .... मुझे समझ में नहीं आ रहा है क्यों? –

+0

@AnudeepSamaiya क्योंकि 9 वैध चर नाम नहीं है। आप अपने चर 9 का नाम नहीं दे सकते, enum constants भी एक चर की तरह कार्य करते हैं। वे असल में, वैरिएबल भी हो सकते हैं। – Haggra

2

जावा नामकरण नियम कहते हैं कि तुम चर, वर्ग के नाम ect ... संख्या के साथ शुरू नहीं कर सकते।

1

कोशिश

public enum Rank { Ace, Jack, Queen, King }//and other suits 
अपने enum के बजाय

समस्या यह है कि अगर आप enum मान के रूप में संख्या डाल सकती थी तो संकलक, पता नहीं चलेगा जब कोई व्यक्ति "9" लिखने यह उनका मतलब है संख्या या enum। तो जावा, लगभग हर भाषा के रूप में, इस तरह के enum मूल्य

+0

@DuncanJones कोड से पेस्ट कॉपी करें जो गलत काम करता है। निश्चित और अतिरिक्त जानकारी –

+0

@ डंकन जोन्स, मुझे पता है। धन्यवाद बीटीडब्ल्यू, मैं हमेशा कम से कम एक अच्छा काम करने का जवाब छोड़ने की कोशिश करता हूं –

6

बातें enum अंदर रों पहचानकर्ता, स्थिर अंतिम (स्थिर) के नाम हैं वस्तुओं है कि बनाया जाएगा। तो, आप किसी वस्तु का नामकरण करने के लिए int का उपयोग नहीं कर सकते हैं।

enum रों आप प्रत्येक प्रविष्टि के लिए खेतों डाल सकते हैं:

public static enum Suit {HEART,DIAMOND,SPADE,CLUB} 

public static enum Cards { 
    ACE_OF_HEART(Suit.HEART,14), QUEEN_OF_SPADE(Suit.SPADE,13) /* etc etc*/; 

    private final Suit mSuit; 
    private final int mRank; 

    private Cards(Suit suit, int rank) { 
     assert rank >= 2 && rank <= 14; 
     mSuit = suit; 
     mRank = rank; 
    } 

    public Suit getSuit() { 
     return mSuit; 
    } 

    public int getRank() { 
     return mRank; 
    } 
} 

आप वास्तव में सभी 52 कार्ड इस तरह से कोड करने के लिए नहीं करना चाहती। आप इसे किसी अन्य तरीके से मॉडल कर सकते हैं:

सुइट: कुछ लोकप्रिय रैंक के साथ

public static enum Suit { SPADE, HEART, DIAMOND, CLUB}; 

कक्षा नामित स्थिरांक के रूप में:

public class Card{ 

    public static final int ACE = 14; 
    public static final int QUEEN = 13; 
    public static final int KING = 12; 
    public static final int JACK = 11; 

    private final int mRank; 
    private final Suite mSuit; 

    public Card(Suite s, int r){ 
    this.mSuit = s; 

    if(r < 2 || r > 14){ 
     throw new IllegalArgumentException("No such card with rank: "+r); 
    }  

    this.mRank = r; 
    } 

    public Suit getSuit() { 
     return mSuit; 
    } 

    public int getRank() { 
     return mRank; 
    } 
} 
संबंधित मुद्दे