在扑克中处理5张牌的随机牌

时间:2015-01-10 22:57:45

标签: java arraylist

因此,通过这个标题,我需要随机交出5张牌以模拟扑克游戏。我也必须安排一些东西,这样手不能多次包含同一张卡。这就是我到目前为止所做的:

public static ArrayList<Card> makeDeck()
{
      ArrayList<Card> deck = new ArrayList<Card>( 52 ); 
    String[] suits = 
        { "spades", "hearts", "diamonds", "clubs" }; 

    for ( String suit : suits ) 
    { 
      for ( int k = 2 ; k <= 14 ; k++ ) 
      { 
        deck.add( new Card( suit, k ) ); 
      } 
    } 
    return deck;
}

public static ArrayList<Card> dealHand( ArrayList<Card> deck )
{
  ArrayList<Card> hand = new ArrayList<Card>(5);
  Random rc = new Random();
  for ( int j = 0; j <= hand.size(); j++)
  {
      hand.add(rc.nextInt(deck.size()));
  }
   return hand;

}

public static void main( String[] args )
{
  System.out.println(dealHand());
}

我收到一条错误消息:MainClass.java:38:错误:没有为add(int)找到合适的方法

  hand.add(rc.nextInt(deck.size())); 

如果有人可以向我解释如何解决这个错误,那将非常有帮助,谢谢!

2 个答案:

答案 0 :(得分:2)

您只是创建一个随机数并将其添加到您的手中。我认为你想得到代表的Card并将其添加到手中。

试试这个:

int cardNumber = rc.nextInt(deck.size());
Card card = deck.remove(cardNumber);
hand.add(card);
为了清楚起见,我已经比需要的更加冗长。如果您需要,可以在一行中完成:

hand.add(deck.remove(rc.nextInt(deck.size())));

请注意,使用甲板上的remove()代替get(),否则您将面临同时处理同一张卡两次(或更多次)的风险。

修改给出您的评论:是的,您需要更改main()中的调用方式:

System.out.println(dealHand(makeDeck()));

你没有将牌组传递给dealHand()

编辑2 OH!哈,我明白了。检查一下你的循环,它会增加一个手的大小,这样循环永远不会终止,而套牌也会用完卡片。

更改

for ( int j = 0; j <= hand.size(); j++)

for ( int j = 0; j < 5; j++) // Note less-than, not less-than-or-equal-to

将手大小作为makeHand()的参数并使用它预先分配ArrayList并驱动此循环而不是取决于&#34;幻数&#也可能值得考虑34; 5。

答案 1 :(得分:1)

更改

hand.add(rc.nextInt(deck.size()));

hand.add(deck.get(rc.nextInt(deck.size())));