2013-08-02 178 views
8

这里是我的代码,这就是抛出一个错误说Cannot convert type "int" to Cards.SuitsCannot convert type "int" to Cards.Rank如何将int转换为枚举值?

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; 
} 

现在西服枚举和排名枚举是作为卡定期甲板开始在ACE = 1等等,西装是DIAMONDS,CLUBS,HEARTS,SPADES。 谁能告诉我为什么即时通讯上面的错误。下面的代码是从一本书中读取的。 谢谢!

*编辑

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

您正在使用'(适合)suitVal',但您发布的枚举实际上名为'Suit'。 –

回答

1

改变你的线在这样的

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

,并为您的班级正在枚举在构造函数,以便改变它像这样

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

Intellisense仍然指导我使用公共只读套装;正如你的答案一样。我应该提到这是一个类库。 – MikaAK

+0

我已经更新了西服套装西装套装;您正在将枚举传递给作为Suit的参数(在上面给出的代码中)。不适合。 – Ehsan

+0

这不起作用,当我不得不这样做时,它是Suits.Suit和Ranks.rank – MikaAK

2

根据你的枚举声明,Suit在[0..3]范围内,而等级在[1..13]范围内(注意,这个等级不是基于零),所以内部的for循环应该被校正:

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,因为当suitval和ranval均为0时,上面的代码将会引发错误,这会对卡片[-1]评估此卡片[suitVal * 13 + rankVal - 1]。因此索引超出范围。 – Ehsan

+0

@Ehsan Ullah:谢谢,我纠正了卡内的索引[...] –

0

我会看到它会得到其它错误“索引数组的范围外”

当suitVal = 0和rankVal = 0,卡片[suitVal * 13 + rankVal - 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 + rankVal-1] = [0 * 13 + 0 -1] = [ - 1]!哎呀!

并在PRGM:

public readonly Suit suit; //not Suits 
public readonly ranks rank; //not Rank