打印卡片然后洗牌并重新打印

时间:2016-05-04 23:17:03

标签: java

我正在尝试完成以下操作,但是我一直试图在洗牌之前打印牌组。

创建一个名为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() );
       }


    }

}

1 个答案:

答案 0 :(得分:2)

有几种方法可以实现shuffle方法。如果没有为你做功课,我可以建议以下两种策略:

  1. 随机播放卡片的顺序

    • 遍历从索引0到51的卡片列表
    • 在每个索引处将卡片换成另一个随机索引(即使是本身,卡片在洗牌时也可能会在同一位置结束)
    • 警告:此方法适用于学校目的,但算法本身被视为 naive ,因为它有偏见。有关详细信息,请参阅this文章。
  2. 看看Fisher-Yates shuffle的额外风格!

  3. 甚至不要编写自己的方法,而是利用Java的Collections:shuffle方法。