gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:56:46 24 4
gpt4 key购买 nike

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

创建一个名为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com