在这里,我有一些关于我正在尝试用 Java 制作的卡片组的代码。 它背后的想法是,创建 2 个方法,创建一个 createDeck 方法,该方法返回一个 ArrayList,其中还包含 52 个不同的卡片。

并将它们随机化。 所以基本上将提供的卡片列表作为参数放置并以随机顺序放置它们。 可以使用“Collections.shuffle(arrayList);”来完成吗?

任何帮助,将不胜感激

class Card
{
    public static final String[] SUIT = new String[]{"Clubs", "Spades", "Diamonds", "Hearts"};
    public static final String[] RANK = new String[]{"Ace", "King", "Queen", "Jack", "10", "9", "8", "7", "6", "5", "4", "3", "2"};

    public static ArrayList<Card> createDeck()
    {
    }

    private Integer suit;
    private Integer rank;

    public Card(Integer suit, Integer rank)
    {
        this.suit = suit;
        this.rank = rank;
    }

    public String toString()
    {
        return "'" + SUIT[this.suit] + " " + RANK[this.rank] + "'";
    }
}

class Main
{
    public static void main(String[] arguments)
    {
        System.out.println(new Card(2, 6));
        System.out.println(new Card(3, 12));
    }
}

#1楼 票数:1

想法是基本上遍历SUITRANK所有可能组合。 您可以通过以嵌套方式循环遍历它们来做到这一点。

确保使用ArrayList.add(Object)方法在ArrayList添加这些组合。 这将生成您的牌组。

现在,您可以使用 Java Collections库来随机化该牌组。 使用Collections.shuffle(deck)调用随机方法,整个甲板将被洗牌。

import java.util.ArrayList;
import java.util.Collections;

class Card {

    public static final String[] SUIT = new String[]{"Clubs", "Spades", "Diamonds", "Hearts"};
    public static final String[] RANK = new String[]{"Ace", "King", "Queen", "Jack", "10", "9", "8", "7", "6", "5", "4", "3", "2"};

    public static ArrayList<Card> createDeck() {

        ArrayList<Card> deck = new ArrayList<>();
        for(int i=0; i<4; i++){
            for(int j=0; j<13; j++){
                deck.add(new Card(i, j));
            }
        }
        Collections.shuffle(deck);
        return deck;
    }
    ...
}

#2楼 票数:1

您可以使用枚举来实现 is。 这将使您可以为等级分配值。 另一个好处是,您可以轻松生成减少的牌组,例如没有 2、3 和 4 左右的卡片。

我用内部类写了一个解决方案,但你也可以把它们拉出来。

public class Cards {

    public static void main(String[] args) {
        Cards cards = new Cards();

        final List<Card> deck = cards.createDeck();
        Collections.shuffle(deck);

        deck.forEach(System.out::println);
    }

    private List<Card> createDeck() {
        final List<Card> deck = new ArrayList<>();
        for (Rank rank : Rank.values()) {
            for (Suit suit : Suit.values()) {
                deck.add(Card.of(suit, rank));
            }
        }
        return deck;
    }

    public enum Suit {
        Clubs,
        Spades,
        Diamonds,
        Hearts
    }

    public enum Rank {
        Ace("Ace"),
        King("King"),
        Queen("Queen"),
        Jack("Jack"),
        Ten("10"),
        Nine("9"),
        Eight("8"),
        Seven("7"),
        Six("6"),
        Five("5"),
        Four("4"),
        Three("3"),
        Two("2");

        private final String name;

        Rank(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }

    public static class Card {
        private final Suit suit;
        private final Rank rank;

        private Card(Suit suit, Rank rank) {
            this.suit = suit;
            this.rank = rank;
        }

        public static Card of(Suit suit, Rank rank) {
            return new Card(suit, rank);
        }

        public Suit getSuit() {
            return suit;
        }

        public Rank getRank() {
            return rank;
        }

        @Override
        public String toString() {
            return rank.getName() + " of " + suit;
        }
    }
}

  ask by translate from so

未解决问题?本站智能推荐:

4回复

使用ArrayList创建卡片组

我知道以前很多人都问过这个问题(在来到这里之前我环顾了一下),但是我似乎无法弄清楚如何解决我的代码。 我的任务是制作一个静态makeDeck方法,该方法返回一个ArrayList,其中包含标准纸牌中的52张纸牌。 我是ArrayList的新手,所以我不确定我是否正确初始化了ArrayList
4回复

构建卡片组(ArrayList,Array等)的最有效方法?

因此,我是Java的新手,并且在使用数组之前先使用ArrayLists。 我喜欢它们与Python列表更相似,并且了解ArrayList仅包含对象而不是基元,在我看来,这使它们对包含多种类型的列表更有用。 我写这是为了展示如何制作一副纸牌(对于此示例,一切都是静态的): 我相信这可能
1回复

创建卡片组?

我目前正在研究扑克模拟器,但无法创建一副扑克牌。 我当前的代码创建甲板 我需要使其看起来像: 无论如何,我可以使它看起来像上面吗? 这也是我从另一个类引用的代码
2回复

如何退回我的卡片组?

我创建了纸牌游戏,但我不知道如何返回我的数组,因为我过去使用过instanceof来使用不同的方法,但从来没有像这样的整个数组。 我把我的代码放在下面: 卡类- /** * * Constructor for a single card * */ public class C
2回复
2回复

如何将更多的ArrayList组合为1组ArrayList

我有一个Arraylist变量 然后我用了nodes.add(split); 我得到了ArrayList这样的结果 如何将其组合成这样的结果 谢谢你们的回答。
2回复

创建员工的ArrayList

我有三节课 雇员 生产工人 值班主管班 我的想法是让生产和轮班主管扩展员工类,然后创建另一个类EmployeeList以在其中填充有关生产工人和轮班主管的信息。 我如何从员工类中获取名称和信息以迭代到arraylist中? 我如何才能添加超过一半产品
5回复

创建数组的arraylist

我正在尝试创建一个字符串数组的数组列表。 当我完成后,我希望数组列表看起来像这样: 我试图定义一个数组,然后将其添加到数组列表中。 然后重新定义一个数组并再次添加它。 但是数组列表似乎只包含最后一个条目。 看一看: 输出是: [1,1] [1,1] [1,1] [1,