我正在创建一个二十一点游戏,我试图找出如何处理该卡并让它显示价值和名称。我选择两个属性的原因纯粹是基于逻辑的,当涉及到将Ace作为1或11时,Haven已经达到了这一点,但我只想知道如果有人想知道的话。这是我到目前为止所拥有的。我感谢任何帮助!我将错误列为以下评论
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;
}
}
答案 0 :(得分:2)
简单:不要打电话
Cards.name()
但只是
name()
获取您的返回值。
除此之外:你做得太过分了。你想要两个枚举,一个用于卡片值,一个用于卡片套件。然后你有一个卡片类,有两个字段来保持价值和适合。
在一个枚举中将所有值的时间设置为4,这将使您的代码变得比它应该的复杂得多。
将值字段设为public并使用getter方法也没有意义。更好地将领域变为私有。
最后,我不喜欢将它们称为面值1和2的命名。但我现在没有更好的主意。