我正在尝试完成以下操作,但是我一直试图在洗牌之前打印牌组。
创建一个名为DeckOfCards的类,它存储Card类的52个对象。包括洗牌的方法,交易卡片,并报告卡片中留下的卡片数量。洗牌方法应该采用完整的牌组。使用一个主要方法创建一个驱动程序类,该方法从一个洗牌的牌组中处理每张牌,并在处理时打印每张牌。
我无法弄清楚如何在洗牌之前处理牌组然后处理一张牌并报告牌组中有多少牌。请帮忙。
import java.util.Random;
public class DeckofCard {
private Cards[] cards;
int i;
DeckofCard()
{
i=52;
cards = new Cards[52];
int x=0;
for (int a=0; a<=3; a++)
{
for (int b=0; b<=12; b++)
{
cards[x] = new Cards(a,b);
x++;
}
}
}
public Cards drawFromDeck()
{
Random generator = new Random();
int index=0;
do {
index = generator.nextInt( 52 );
} while (cards[index] == null);
i--;
Cards temp = cards[index];
cards[index]= null;
return temp;
}
public int getTotalCards()
{
return i;
}
}
然后这是我的卡片类
public class Cards
{
private int rank, suit;
private static String[] suits = { "hearts", "spades", "diamonds", "clubs" };
private static String[] ranks = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };
Cards(int suit, int rank)
{
this.rank=rank;
this.suit=suit;
}
public @Override String toString()
{
return ranks[rank] + " of " + suits[suit];
}
public int getRank() {
return rank;
}
public int getSuit() {
return suit;
}
}
和我的经销商;
public class Dealers {
public static void main(String[] args)
{
DeckofCard deck = new DeckofCard();
Cards C;
System.out.println( deck.getTotalCards() );
while (deck.getTotalCards()!= 0 )
{
C = deck.drawFromDeck();
System.out.println( C.toString() );
}
}
}
答案 0 :(得分:2)
有几种方法可以实现shuffle方法。如果没有为你做功课,我可以建议以下两种策略:
随机播放卡片的顺序
看看Fisher-Yates shuffle的额外风格!
甚至不要编写自己的方法,而是利用Java的Collections:shuffle方法。