洗牌

Shuffling a Deck

我正在进行 java 制作一副纸牌的实验。到目前为止,我相信我已经设置了套牌,现在需要洗牌。我应该洗牌的方式是反复(200 次)从牌组中随机挑选 2 张牌并交换它们。我对 Java 还比较陌生,以前从未遇到过这样的事情,所以我什至不知道从哪里开始。

有人可以帮忙吗?

public class DeckOfCards {

您有一组卡片。要随机选择一张牌,您可以使用 Random#nextInt(int)。它将在 0 和您传递给它的参数之间选择一个随机数。使用它,您只需选择两张随机卡片并将它们交换到数组中。

public final Random random = new Random();

public void shuffle() {
    for(int i = 0; i < 200; i++) {
        int firstCardIndex = random.nextInt(number - 1);
        int secondCardIndex = random.nextInt(number - 1);

        Card firstCard = deck[firstCardIndex];
        Card secondCard = deck[secondCardIndex];

        deck[firstCardIndex] = secondCard;
        deck[secondCardIndex] = firstCard;
    }
}

有一些常见的洗牌算法。我以前用过Fisher-Yates Shuffle

我没看清楚你的问题。但也许你想做这样的事情(不确定) - 在这里我洗牌 5 次,每次我从牌堆中随机挑选两张牌。

public void display() {
     String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};
     String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};

     List<String> list1=new ArrayList<>(Arrays.asList(ranks));
     List<String> list2=new ArrayList<>(Arrays.asList(suits));

     int times=1;
     while(times<=5){
         Collections.shuffle(list1);
         Collections.shuffle(list2);
         Random r=new Random();
         int i=r.nextInt(3);
         int j=r.nextInt(3);
         int k=r.nextInt(12);
         int m=r.nextInt(12);
         System.out.println("For "+times+" time you picked up "+list1.get(k)+
                 " of "+list2.get(i)+" and "+list1.get(m)+ " of "+list2.get(j));
         times++;
     }
}

在 main 方法中调用 "display" 函数。