2015-05-17 4 views
0

Я делаю базовую колоду карт на данный момент, и я столкнулся с проблемой с использованием перечислений.Типы перечислений могут не быть введены в действие ошибки

Как исправить следующую ошибку (типы перечислений не может быть обработан) в моем коде и получить значение, присвоенное каждому перечислимого

public enum Rank { 

    ACE(14), 
    KING(13), 
    QUEEN(12), 
    JACK(11), 
    TEN(10), 
    NINE(9), 
    EIGHT(8), 
    SEVEN(7), 
    SIX(6), 
    FIVE(5), 
    FOUR(4), 
    THREE(3), 
    TWO(2); 
    private final int rankValue; 

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

    public int getRankValue() { 
     return rankValue; 
    } 

} 
private Card[] cards = new Card[52]; 

public Deck() { 
    int posInDeck = 0; 
    for (Suit s : Suit.values()) { 
     for (Rank r : Rank.values()) { 
      cards[posInDeck] = new Card(s.toString(),new Rank(r.getRankValue(), r.toString()), false);// ERROR HERE 
      posInDeck++; 
     } 
    } 
} 
+0

«Как исправить следующую ошибку», что ошибка? Предоставьте сообщение об ошибке и ** короткий, но полный ** код позволит нам воспроизвести его. На данный момент похоже, что этот фрагмент кода является частью класса 'Deck', но я могу только предполагать его только на уровнях отступов и имени конструктора. – Pshemo

+0

Почему бы не определить только значения в вашем перечислении 'Rank' и передать' Rank.ACE' конструктору вашей 'Card' (и отредактировать поле/getter/setter в' Card' соответственно? Создание экземпляра перечисления не делает потому что перечисление представляет собой статический набор значений. – Stefan

ответ

3

Вы не можете создать экземпляр enum, как вы бы создать экземпляр class , Заявление new Rank(r.getRankValue(), r.toString()) неверно.

Это то, что вы можете сделать вместо этого:

cards[posInDeck] = new Card(s.toString(),r,false); 
1

Вы можете просто использовать r вместо new Rank(r.getRankValue(), r.toString())

Смежные вопросы