1

我已经完全按照我现在想要的方式修复了它。如果其他人有同样的问题,我认为这是尝试设置一副牌的最简单和最有效的方法。您可以使用deck[random][0] 和deck[random][1] 中的随机变量挑选出单独的卡片。感谢所有帮助,这是我的代码:

public class NewDeck {

    public static void main(String[] args) {

        String[] suits = new String[] { "Clubs", "Diamonds", "Spades", "Hearts" };

        String[] faces = new String[] { "Ace", "King", "Queen", "Jack" };

        String[][] deck = new String[suits.length * (faces.length + 9)][2];

        int a = 0;

        for (String y : suits) {

            for (String x : faces) {

                deck[a][0] = x;
                deck[a][1] = y;
                a++;

            }

        }

        for (String y : suits) {

            for (int p = 2; p < 11; p++) {

                deck[a][1] = y;
                String pp = Integer.toString(p);
                deck[a][0] = pp;
                a++;

            }

        }

        for (int p = 0; p < deck.length; p++) {

            System.out.print(deck[p][0] + " of ");
            System.out.println(deck[p][1]);

        }

    }

}
4

3 回答 3

2

您应该将参数类型添加到您的字符串并创建一个Pair类。请注意,对于泛型,您需要 1.5 或更高版本的 Java 编译器。

class Pair {

     private final String face;  
     private final String suit;  

     Pair(String suit, String face) {
         this.face = face; 
         this.suit = suit;             
     }
     @Override
     public String toString() {
        return "(" + suit + ", " + face + ")";
     }
}

然后你可以使用这个Pair类,使用适当的List方法getsize

List<Pair> deck = new ArrayList<Pair>();

List<String> suits = new ArrayList<String>();
suits.add("Hearts");
suits.add("Diamonds");
suits.add("Clubs");
suits.add("Spades");

List<String> faces = new ArrayList<String>();
faces.add("Ace");
faces.add("King");
faces.add("Queen");
faces.add("Jack");

for(int suit = 0; suit < suits.size(); suit++){

    for(int face = 0; face < faces.size(); face++){

        deck.add(new Pair(suits.get(suit), faces.get(face)));             

    }

}

如果你重写你的toString方法,Pair你也System.out.println(deck)可以得到你想要的字符串表示ArrayList

于 2013-07-31T10:47:52.673 回答
0

可能你需要改变这个

        deck.add(suits[suit], faces[face]);             

        deck.add(suits[suit] + faces[face]);             

因为您的想法是连接列表中的元素并将其添加到甲板列表。

于 2013-07-31T10:44:45.573 回答
0

您不能在 List 的一个索引处存储两个值。但你能做的是

选项 1
存储连接的 \string like

改变

   deck.add(suits[suit], faces[face]);   

   deck.add(suits[suit] + "," + faces[face]);  

然后输出甲板[2] =西装,脸

选项 2 将字符串列表更改为对象列表,此对象包含西装和面部的详细信息

public class Deck {
    private String suit;
    private String face;

// getter and setters;
}

并列出成为

List<Deck> deck

并将条目添加为

deck.add(new Deck(suits[suit], faces[face]))
于 2013-07-31T10:50:03.347 回答