2013-08-02 7 views
8

यहाँ मेरी कोड एक त्रुटि फेंक thats Cannot convert type "int" to Cards.Suits और कह है Cannot convert type "int" to Cards.Rankint से enum value को कैसे परिवर्तित करें?

private Card[] cards; 
public Deck() 
{ 
    cards = new Card[52]; 
    for (int suitVal = 0; suitVal < 4; suitVal++) 
    { 
     for (int rankVal = 0; rankVal < 14; rankVal++) 
     { 
      cards[suitVal * 13 + rankVal - 1] = new Card((Suits)suitVal, (Rank)rankVal); 
     } 
    } 
} 

कार्ड निर्माता है

public readonly Suits suit; 
public readonly Rank rank; 
public Card(Suits newSuit, Rank newRank) 
{ 
    suit = newSuit; 
    rank = newRank; 
} 

अब सूट enum और रैंक enum ताश के पत्तों की एक नियमित रूप से डेक ऐस से शुरू के रूप में कर रहे हैं = 1 इतने पर और सूट डायमंड, क्लब, दिल, स्पीड हैं। क्या कोई मुझे बता सकता है कि मुझे उपरोक्त त्रुटि क्यों मिल रही है। निम्नलिखित कोड एक पुस्तक से लिया जा रहा था। धन्यवाद!

में * संपादित

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

    public enum Suit 
    { 
     DIAMOND, 
     CLUB, 
     HEART, 
     SPADE, 
    } 
+0

आप 'Suits' और' Rank' के लिए परिभाषा दिखा सकते हैं? –

+0

उस विधि के रूप में डुप्लीकेट नहीं है और अभी भी एक त्रुटि – MikaAK

+1

देता है आप '(सूट) सूट वैल का उपयोग कर रहे हैं लेकिन आपके द्वारा पोस्ट किए गए enum को वास्तव में 'सूट' नाम दिया गया है। –

उत्तर

1

परिवर्तन अपनी लाइन के लिए की तरह इस

cards[suitVal * 13 + rankVal] = new Card(((Suit)suitVal), ((ranks)rankVal)); 

और के रूप में अपने वर्ग निर्माता में enums ले जा रहा है तो यह

public readonly Suit suit; 
public readonly ranks rank; 
public Card(Suit newSuit, ranks newRank) 
{ 
    suit = newSuit; 
    rank = newRank; 
} 
+0

का उपयोग कर सकते हैं इंटेलिसेंस अभी भी मुझे सार्वजनिक रीडोनली सूट सूट का उपयोग करने के लिए निर्देशित कर रहा है; जैसा कि आपके उत्तर के लिए oppsed। मुझे जिक्र करना चाहिए कि यह एक कक्षा पुस्तकालय है। – MikaAK

+0

मैंने सूट सूट के लिए सूट सूट अपडेट किया है; आप पैरामीटर के रूप में गणना पारित कर रहे हैं जो सूट (आपके द्वारा ऊपर दिए गए कोड में) है। सूट नहीं – Ehsan

+0

यह काम नहीं करता है जब मुझे यह करना होता था यह सूट था। सूट और रैंक। रैंक – MikaAK

2

के अनुसार की तरह इसे बदल आपकी enum घोषणाएं, सूट [0..3] रेंज में है, जबकि रैंक [1..13] रेंज में हैं (ध्यान दें, रैंक आधारित शून्य नहीं है), तो पाश के लिए भीतरी सही किया जाना चाहिए:

for (int rankVal = 0; rankVal < 13; rankVal++) // <- 14 changed for 13: [0..13] has the same length as [1..14] 
    { 
    cards[suitVal * 13 + rankVal] = new Card((Suits)suitVal, (Rank)(rankVal + 1)); // <- removed -1 from index; add 1 to rankVal, we need [1..14], not [0..13] 
    ... 
+0

-1 अनुमान लगा नहीं सकते हैं क्योंकि उपरोक्त कोड एक त्रुटि फेंक देगा जब दोनों सूट और रनवाल 0 हैं। जो इस कार्ड का मूल्यांकन करेंगे [सूटवेल * 13 + रैंकवेल -1] कार्ड के लिए [- 1]। इसलिए सीमा से बाहर सूचकांक। – Ehsan

+0

@ एहसान उल्लाह: धन्यवाद, मैंने कार्ड के भीतर इंडेक्स को सही किया है [...] –

0

मैं इसे अन्य त्रुटि प्राप्त होगी देखेंगे

जब suitVal = 0 और rankVal "सूचकांक सरणी की सीमा से बाहर था" = 0, कार्ड [सूट वैल * 13 + रैंकवेल - 1] = -1 जो ​​सरणी इंडेक्स के बाहर है।

0

यह अच्छी तरह से चल रहा है, लेकिन सही कर रहा है इस

for (int suitVal = 0; suitVal < 4; suitVal++) 
    { 
     for (int rankVal = 0; rankVal < 14; rankVal++) 
     { 
      cards[suitVal * 13 + rankVal - 1] = new Card((Suit)suitVal, (Rank)rankVal); 
     } 
    } 

यहाँ कार्ड [suitVal * 13 + rankVal - 1] में

[Loop 1:] 
suitVal =0 
rankVal=0 

[suitVal * 13 + रैंकवेल - 1] = [0 * 13 + 0 -1] = [-1]! उफ़!

और अपने prgm में:

public readonly Suit suit; //not Suits 
public readonly ranks rank; //not Rank 
संबंधित मुद्दे