java - 打印一副牌,然后洗牌并重新打印

标签 java

我正在尝试完成以下任务,但我在洗牌之前试图打印这副牌。

创建一个名为 DeckOfCards 的类,它存储 Card 类的 52 个对象。包括洗牌、发牌以及报告牌组中剩余牌数的方法。洗牌方法应该假设一副完整的牌。创建一个带有 main 方法的驱动程序类,该方法从洗牌的牌中处理每张牌,并在处理每张牌时打印它。

我不知道如何在洗牌之前处理这副牌,然后处理一张牌并报告牌组中有多少张牌。请帮忙。

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 到 51 遍历卡片列表
    • 在每个索引处将卡片与另一个随机索引交换(即使是其本身,洗牌时卡片也可能会出现在同一个位置)
    • 警告:此方法适用于学校目的,但算法本身被认为幼稚,因为它存在偏见。请参阅this文章了解更多信息。
  2. 看看Fisher-Yates shuffle以获得额外的风格!

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

关于java - 打印一副牌,然后洗牌并重新打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37039690/

相关文章:

java - 带有 Rest 接口(interface)的 Spring Mvc Web 应用程序

java - IBM MQ-FFDC-CSIException : JMSCS0002 when I try to run from console

java飞行记录器连接错误

java - 由于多线程,ArrayIndexOutOfBounds,我该怎么办?

java - jasper 报告显示基于 boolean 值的值

java - 在 Session.save() 之间交换行。输出发生什么变化。请参阅代码中的注释。我是java hibernate新手

java - 为什么 Spring Data 存储库上的 getOne(...) 不会抛出 EntityNotFoundException?

java - 如何在没有ajax的情况下将不同的jsp页面合并为一个

java - 如何减少ArrayList未使用的容量

java - 如何了解在 Mac 上双击 .jar 文件时会发生什么情况?