如何让我的ArrayList添加52个唯一对象而不是全部相同?

时间:2013-04-29 10:31:55

标签: java loops arraylist unique add

我一直坚持这一点,但我想我已经意识到我的套牌制作者最终会制作一副卡片,它们都是循环中的最后一个值。

这是我的甲板制造商和手工编制者的代码。它包括一个对象卡,它有两个整数,这里是v和s。还有一张要处理的五张牌的ArrayList。我会感激一些帮助!

public ArrayList buildDeck(){
    ArrayList<Card> newDeck = new ArrayList<Card>(52);     
    for(int v=0;v<13;v++)
        for(int s=0;s<4;s++) {
            Card nextCard = new Card(v,s);          
            newDeck.add(nextCard);
        }
    return newDeck;
}

public ArrayList fiveDeal() {
    ArrayList<Card> handOfFive = new ArrayList<Card>(0);
    for(int d=0;d<5;d++)
    {
        handOfFive.add(cardDeck.get((gen.nextInt(cardDeck.size()))));
    }
    return handOfFive;
}

这是我的Card类

public class Card
{
    public static String value;
    public static String suit;
    public Card()
    {
        value="100";
        suit="Cards";
    }
    public Card(int v, int s)
    {
        if(v==0)
            value="Jack";
        if(v==1)
            value="Ace";
        if(v==11)
            value="Queen";
        if(v==12)
            value="King";
        else
            value = String.valueOf(v);
        if(s==0)
            suit="Clubs";
        if(s==1)
            suit="Spades";
        if(s==2)
            suit="Diamonds";
        else
            suit="Hearts";
    }
    public static String getCard(Object Card)
    {
        return value + " of " + suit;
    }
}

2 个答案:

答案 0 :(得分:3)

正如Marko Topolnik所预料的那样,错误出现在Card课程中。变化

public static String value;
public static String suit;

public String value;
public String suit;

解决当前问题。

static属性属于类本身,而非静态属性属于该类的特定实例。

另外,我会使用private访问修饰符而不是public并使用getter / setter方法来访问变量(eclipse可以为您生成方法)。通过这种方式,它们将被封装,您可以控制它们的访问和修改方式。

答案 1 :(得分:0)

我建议你自己创建一个Deck课程,当强调deal方法时从卡片中移除卡片

除了已经提出的建议之外,您的问题可能是gen.nextInt(cardDeck.size())始终返回相同的号码。但是,您的问题是您正在尝试使用ArrayList进行卡片组建模而不删除。