如何实现一副牌?

Cut*_*ter 1 java arrays random methods return

(预警 - 我知道有类似的问题,但我相信我的问题不同,因为我希望将花色和排名存储在不同的数组中。如果社区有不同的看法,那么我会很乐意删除该问题。)

我正在尝试随机生成一副牌(也称为洗牌)。在函数generateCard中,我生成一个等级和一个花色。所以它本质上生成一张单卡。我还没有包含任何返回,因为我不知道如何返回两个不同的值,特别是因为它们具有不同的数据类型。我真的很想这样做,所以如果答案可以抵制建议更有效或标准的方法的冲动,我将不胜感激。我是一个初学者,了解如何让不起作用的东西发挥作用,这对我很有帮助。

综上所述。我的问题是,如何首先返回两个不同数据类型的项目?其次,分别收集返回并将它们存储在两个不同的数组中(deckSuitArray 和 DeckRankArray)?

这是我的代码:

package texasHoldem;
import java.util.Random;

public class SingleRound{

    public static void main(String[] args) {

        char[] deckSuitArray = new char[51];
        int[] deckRankArray = new int[51];

        for(int i = 0; i < 53; i++){
            generateCard();
            //wish to cycle though arrays storing random cards at different positions
        }
    }
    public static void generateCard(){ //will remove void
    Random ran = new Random();
    char suit = '0';
    int randomRank = ran.nextInt(13)+1;
    System.out.println(randomRank);

    int randomSuit = ran.nextInt(4)+1;

    switch (randomSuit){

    case 1: suit = 'C'; break;
    case 2: suit = 'S'; break;
    case 3: suit = 'D'; break;
    case 4: suit = 'H'; break;

    }
    System.out.println(suit);
    }
}
Run Code Online (Sandbox Code Playgroud)

xen*_*ros 5

  1. Java 用于面向对象编程。
  2. 组合很有用。

你的卡片应该是一个类。Card.java应如下所示。添加 equals 方法。

enum Suit {HEART, DIAMONDS, SPADES, CLUBS}
enum Rank {TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE}

public class Card {
    Rank rank;
    Suit suit;
    public Card (Rank r, Suit s) {rank = r; suit = s;} //public constructor
    @Override
    public String toString() {
        return rank.toString() + " " + suit.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以做一个Deck.java

public class Deck {

    private List<Card> cards;

    public Deck() {
        cards = new ArrayList<>();
        for (Suit s : Suit.values()) {
            for (Rank r : Rank.values()) {
                cards.add(new Card(r, s));
            }
        }
    }

    public void shuffle() {
        Collections.shuffle(cards);
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Deck 类中添加了洗牌功能。这个洗牌是一个非常好的洗牌。它有效地随机化卡片的顺序。