因此,通过这个标题,我需要随机交出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()));
如果有人可以向我解释如何解决这个错误,那将非常有帮助,谢谢!
答案 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())));