【问题标题】:Dealing four random hands from a deck of cards in Java using arrays使用数组从 Java 中的一副牌中随机处理四手牌
【发布时间】: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 我会创建 CardDeck 类和 SUITEVALUE 枚举。然后一切都在一起;洗牌时无需跟踪一堆东西。
  • 您的代码似乎遗漏了一些{},您的for 循环没有做任何事情,您的while 循环使用了一个不存在的变量并且永远不会终止
  • 如果我使用this answer链接的数组结构,它使用for循环并且我正在使用while。然后有一些代码可以将数字转换为卡名,但它没有链接。我不明白我是图书馆专业的,但现在图书馆学位是学位,所以编程中有核心单元。编程在工作中发挥作用的唯一一次是当我理解为什么要使用对话时。盒子说找不到字符串。啊。

标签: java arrays random


【解决方案1】:

我和你一样的问题,我们可能在同一个单位。在洗牌部分,我比你做的多一点,我有:

int cards = 52;
    int card1, card2
    while (cards > 1)

            for( int k=0; k<100; k++ ) 
        { 
            card1 = rand.nextInt(52); 
            card2 = rand.nextInt(52); 
            int keepSuit = dk[card1]; 
            dk[card1] = dk[card2]; 
            dk[card2] = keepSuit; 
        }  

也许这有帮助?但不确定是否正确,抱歉。

【讨论】:

  • 它给了我一个线索,但我认为我不会让我的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
相关资源
最近更新 更多