Java如何返回枚举值和名称(卡片)

标签 java oop enums playing-cards

我要创建一个二十一点游戏,我正在尝试弄清楚如何发牌并让它显示值和名称。我选择两个属性的原因纯粹是基于逻辑,当涉及到将 A 视为 1 或 11 时。还没有达到这一点,只是想如果有人想知道的话我会包括在内。这是我到目前为止所拥有的。我很感激任何帮助!我将我在下面遇到的错误作为评论添加了

import java.util.Random;
public class CardDeck {
public enum Cards {
    ACE_SPADES (1, 11),
    ACE_HEARTS (1, 11),
    ACE_CLOVES (1, 11),
    ACE_DIAMONDS (1, 11),
    TWO_SPADES (2, 2),
    TWO_HEARTS (2, 2),
    TWO_CLOVES (2, 2),
    TWO_DIAMONDS (2, 2),
    THREE_SPADES (3, 3),
    THREE_HEARTS (3, 3),
    THREE_CLOVES (3, 3),
    THREE_DIAMONDS (3, 3),
    FOUR_SPADES (4, 4),
    FOUR_HEARTS (4, 4),
    FOUR_CLOVES (4, 4),
    FOUR_DIAMONDS (4, 4),
    FIVE_SPADES (5, 5),
    FIVE_HEARTS (5, 5),
    FIVE_CLOVES (5, 5),
    FIVE_DIAMONDS (5, 5),
    SIX_SPADES (6, 6),
    SIX_HEARTS (6, 6),
    SIX_CLOVES (6, 6),
    SIX_DIAMONDS (6, 6),
    SEVEN_SPADES (7, 7),
    SEVEN_HEARTS (7, 7),
    SEVEN_CLOVES (7, 7),
    SEVEN_DIAMONDS (7, 7),
    EIGHT_SPADES (8, 8),
    EIGHT_HEARTS (8, 8),
    EIGHT_CLOVES (8, 8),
    EIGHT_DIAMONDS (8, 8),
    NINE_SPADES (9, 9),
    NINE_HEARTS (9, 9),
    NINE_CLOVES (9, 9),
    NINE_DIAMONDS (9, 9),
    TEN_SPADES (10, 10),
    TEN_HEARTS (10, 10),
    TEN_CLOVES (10, 10),
    TEN_DIAMONDS (10, 10),
    JACK_SPADES (10, 10),
    JACK_HEARTS (10, 10),
    JACK_CLOVES (10, 10),
    JACK_DIAMONDS (10, 10),
    QUEEN_SPADES (10, 10),
    QUEEN_HEARTS (10, 10),
    QUEEN_CLOVES (10, 10),
    QUEEN_DIAMONDS (10, 10),
    KING_SPADES (10, 10),
    KING_HEARTS (10, 10),
    KING_CLOVES (10, 10),
    KING_DIAMONDS (10, 10);

    public final int faceValue1;
    public final int faceValue2;

    private Cards(int faceValue1, int faceValue2) {
        this.faceValue1 = faceValue1;
        this.faceValue2 = faceValue2;
    }

    public String toString() {    //  error: non-static method name() cannot 
                                         be referenced from a static context
        return Cards.name();
    }

    public int getFaceValue1() {
        return faceValue1;
    }

    public int getFaceValue2() {
        return faceValue2;
    }
}
Cards[] deck;

public CardDeck() {
    deck = new Cards[52];
    int i = 0;
    while(i<52) {
        for(Cards card : Cards.values()) {
            deck[i] = card;
            i++;
        }
    }
    shuffle(deck);                              
}
//This will return the first card after shuffling.
public Cards deal() {
    Cards[] cardReturn = new Cards[1];
    cardReturn[0] = deck[0];                 
    Cards[] tempArr = new Cards[deck.length - 1];    
    for(int i=1; i<deck.length; i++) {
        tempArr[i-1] = deck[i];         
    }
    deck = new Cards[tempArr.length];    
    deck = tempArr;                      
    return cardReturn[0];
} 

//this shuffles the deck
public void shuffle(Cards[] deckToShuffle) {
    int index;
    Cards[] temp = new Cards[1];
    Random random = new Random();
    for (int i = deckToShuffle.length - 1; i > 0; i--) {
        index = random.nextInt(i + 1);
        temp[0] = deckToShuffle[index];     
        deckToShuffle[index] = deckToShuffle[i];
        deckToShuffle[i] = temp[0];     
      }
     deck = deckToShuffle;
}       
}

最佳答案

简单:不调用

 Cards.name()

但是简单

 name() 

获取您的返回值。

除此之外:你做得太过分了。您需要两个枚举,一个用于卡值,一个用于卡套件。然后你有一个卡牌类,它有两个字段来保存值(value)和花色。

到目前为止,将所有值乘以 4 放在一个枚举中将使您的代码比应有的复杂得多。

将值字段设为公共(public)并具有 getter 方法也是没有意义的。最好将这些字段设为私有(private)。

最后,我不喜欢只称其为面值 1 和 2。但我现在没有更好的主意。

关于Java如何返回枚举值和名称(卡片),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44014763/

相关文章:

java - Netbeans:将一个项目一分为三(客户端/服务器/通用)

java - jsp/servlet页面的问题

c++ - 私有(private) getter 和 setter

swift - 从 allCases 获取枚举案例索引的通用函数

java - “2D”数组数独谜题用枚举进行检查。尽管调试仍无法理解我自己的程序的流程

java - SolrJ 未终止的线程

java - 有没有一种方法可以用Java中的整数枚举来初始化数组

c++ - 为什么 Adapter 会公开继承 Target 而私有(private)继承 Adapter?

javascript - Typescript 和 Javascript ES6、ES.NEXT 类构造函数参数对比

c# - Enum.HasFlag 应该返回什么?