【发布时间】:2014-11-14 20:16:08
【问题描述】:
我正在尝试编写一些代码来创建一副纸牌的两个数组,一个带有花色,一个带有数值。然后它随机洗牌并打印出四名玩家中每人发的牌。如果有人能给我一些关于如何从我所拥有的出发的想法,我将不胜感激。我遇到的主要问题是如何切换数组(洗牌),然后如何显示玩家得到的东西(交易)。
public class BridgeHands
{
private card[] deck;
private int cardsUsed;
public static void dealHands()
{
final int SUITS = 4; // number of suits in a standard deck
final int CARDS_PER_SUIT = 13; // number of cards in each suit
final int CARDS = SUITS*CARDS_PER_SUIT; // number of cards in a standard deck
deck = new Card[CARDS];
int cardCt = 0;
for(int suit = 0; suit < SUITS; suit++)
{
for(int value = 1; value < CARDS_PER_SUIT; value++)
{
deck[cardCt] = new Card(value,suit);
cardCt++;
}
cards used = 0;
}
}
public void shuffle()
{
for(int i = deck.length-1; i > 0; i--)
{
int rand = (int)(Math.random()*(i+1));
Card temp = deck[i];
deck[i] = deck[rand];
deck [rand] = temp;
}
cards used = 0;
}
public int cardsLeft()
{
int cardsUsed = 0;
return deck.length - cardsUsed;
}
public Card dealCard()
{
if(cardsUsed == deck.length)
throw new IllegalStateException("No cards are left in the deck.");
cardsUsed++;
return deck[cardsUsed - 1];
}
final int HANDS = 4;
final int CARDS_PER_HAND = CARDS/HANDS;
public static String cardName(int suit, int value)
{
final String[] CARD_NAMES =
{"not used", "ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "jack", "queen", "king"};
final String[] SUIT_NAMES =
{"spades", "clubs", "diamonds", "hearts"};
return CARD_NAMES[value] + " of " + SUIT_NAMES[suit];
}
}
【问题讨论】:
-
洗牌并不难,请参阅this 答案。你说的“如何显示玩家得到什么(交易)”是什么意思?
-
你在这一行错过了
;:count = count - 1。顺便说一句,我会将其替换为count--; -
IIWY 我会创建
Card和Deck类和SUITE和VALUE枚举。然后一切都在一起;洗牌时无需跟踪一堆东西。 -
您的代码似乎遗漏了一些
{},您的for循环没有做任何事情,您的while循环使用了一个不存在的变量并且永远不会终止 -
如果我使用this answer链接的数组结构,它使用for循环并且我正在使用while。然后有一些代码可以将数字转换为卡名,但它没有链接。我不明白我是图书馆专业的,但现在图书馆学位是学位,所以编程中有核心单元。编程在工作中发挥作用的唯一一次是当我理解为什么要使用对话时。盒子说找不到字符串。啊。